我想就使用eclipse-test-plugin
提供一些具体的帮助和建议。
我有以下规则:
在我的前端,我在HTML中有这个:
ng-pattern
有没有办法可以创建其他<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>
希望有人可以帮助我解决使用 ng-pattern 的问题。请注意,使用HTML正则表达式 不是一个重复的问题。我正在寻找具体的<input id="password"
name="password"
ng-model="aus.password"
ng-minlength="6"
ng-required="true"
type="password"
value="" />
帮助。
答案 0 :(得分:7)
为ng-pattern
构建一个正则表达式,希望数字和大写字母和一个特殊字符可能很难管理,尽管有{{ 3}} SO some围绕那将使你朝这个方向前进。作为answers,自定义验证器是更好的方法。它们更灵活,更易于维护,并允许您将各种错误案例分成不同的消息给用户。
在@Petr Averyanov suggested的自定义验证部分中阅读它们。弹出这个片段进行演示:
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;
};
}
};
});
&#13;
<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>
&#13;
首先为验证者声明Angular's Forms documentation。我们称之为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一次显示所有消息;否则,你一次只能获得一个。