gpt4 book ai didi

angularjs - 如何验证输入参数格式?

转载 作者:行者123 更新时间:2023-12-04 04:10:35 25 4
gpt4 key购买 nike

我想要有关使用ng-pattern的一些具体帮助和建议。

我有以下规则:

  • 密码必须至少包含一个非字母或数字字符。
  • 密码必须至少包含一位数字('0'-'9')。
  • 密码必须至少包含一个大写字母('A'-'Z')。

  • 在我的前端,我在HTML中有这个:
    <span ng-show="regForm.password.$dirty &&
    !regForm.password.$error.required &&
    !regForm.password.$error.minlength &&
    (aus.password != aus.confirmPassword)">
    Passwords do not match
    </span>

    有没有一种方法可以创建其他 ng-show来测试输入是否符合 ng-pattern的其他三个规则?

    这是我的 <input>
    <input id="password"
    name="password"
    ng-model="aus.password"
    ng-minlength="6"
    ng-required="true"
    type="password"
    value="" />

    希望有人可以使用 ng-pattern 解决这个问题。请注意,这不是 ,不是使用HTML正则表达式的重复问题。我在寻找特定的 ng-pattern帮助。

    最佳答案

    ng-pattern构建一个期望数字,大写字母和特殊字符的正则表达式可能很难管理,尽管周围有some SO answers会让您朝着这个方向发展。作为@Petr Averyanov suggested,自定义验证器是一种更好的方法。它们更灵活,更易于维护,并让您将各种错误情况分为不同的消息发送给用户。

    Angular's Forms documentation自定义验证部分中阅读它们。弹出此代码片段进行演示:

    var app = angular.module('validationDemo', ['ngMessages']);

    app.directive('strongPassword', function() {
    return {
    require: 'ngModel',
    link: function(scope, elm, attrs, ctrl) {
    ctrl.$validators.containsSpecial = function(modelValue, viewValue) {
    if (ctrl.$isEmpty(modelValue)) { return true; }
    if (/[^a-z0-9]/i.test(viewValue)) { return true; }
    return false;
    };

    ctrl.$validators.containsDigit = function(modelValue, viewValue) {
    if (ctrl.$isEmpty(modelValue)) { return true; }
    if (/\d/.test(viewValue)) { return true; }
    return false;
    };

    ctrl.$validators.containsUppercase = function(modelValue, viewValue) {
    if (ctrl.$isEmpty(modelValue)) { return true; }
    if (/[A-Z]/.test(viewValue)) { return true; }
    return false;
    };
    }
    };
    });
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular-messages.js"></script>

    <body ng-app="validationDemo">
    <form name="form" class="css-form" novalidate>
    <div>
    Password:
    <input type="text" ng-model="password" name="password" strong-password /><br />
    {{password}}
    <ul ng-messages="form.password.$error" multiple="true">
    <li ng-message="containsSpecial">
    Your password must contain at least one non-letter, non-digit character
    </li>
    <li ng-message="containsDigit">
    Your password must contain at least one digit
    </li>
    <li ng-message="containsUppercase">
    Your password must contain at least one uppercase letter
    </li>
    </ul>
    </div>
    </form>
    </body>


    首先,为验证者声明一个 directive。我们将其称为 strongPassword
    var app = angular.module('validationDemo', []);

    app.directive('strongPassword', function() {
    return {
    require: 'ngModel',
    link: function(scope, elm, attrs, ctrl) {
    // Validators go here
    }
    };
    });

    将指令作为HTML属性附加到您的密码 input中,并使用通常的camelCase到破折号的转换。
    <body ng-app="validationDemo">
    <form name="form" class="css-form" novalidate>
    <div>
    Password:
    <input type="text" ng-model="password" name="password" strong-password /><br />
    {{password}}
    </div>
    </form>
    </body>

    对于要添加的每个验证,请在 ctrl.$validators的指令中设置一个键。因此,要验证密码是否包含数字,
    link: function(scope, elm, attrs, ctrl) {
    ctrl.$validators.containsDigit = function(modelValue, viewValue) {
    if (ctrl.$isEmpty(modelValue)) { return true; } // They haven't typed yet
    if (/\d/.test(viewValue)) { return true; } // Found a digit
    return false;
    };
    }

    然后,您可以访问 form.<element name>.$error上的错误,在本例中为 form.password.$error.containsDigit。使用 ng-messages指令(确保导入 angular-messages.js)向用户显示错误。
    <ul ng-messages="form.password.$error" multiple="true">
    <li ng-message="containsDigit">
    Your password must contain at least one digit
    </li>
    </ul>
    ng-messages的值是表单上的错误对象,每个 ng-message都用您要打印的值描述 $error上的键。 multiple选项告诉Angular一次显示所有消息。否则,您一次只能得到一个。

    关于angularjs - 如何验证输入参数格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33546772/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com