我试图验证密码,但我遇到了问题。现在,我有一个输入下一个验证器:
<form name="RegisterForm">
<input type="password" name="password"
ng-minlength="8"
ng-maxlength="20"
space-restricted
numbers-required
lowercase-required
uppercase-required
special-characters-required
password-validator
required>
</form>
以下是小写验证器的示例:
function lowercaseRequired() {
return {
require: 'ngModel',
restrict: 'A',
link: link
};
}
function link(scope, element, attrs, ngModel) {
ngModel.$parsers.unshift(function(value) {
var validationPattern = /(?=.*[a-z])|^$/,
isValid = validationPattern.test(value);
ngModel.$setValidity('lowercaseRequired', isValid);
return isValid ? value : undefined;
}
我如何处理四分之三的验证?
我考虑过大正则表达式,但我认为这是一个坏主意。因此,我需要获得一个密码,其中包含:最少8个字符,最多20个字符,不包含空格,并且至少包含四个验证中的三个。
答案 0 :(得分:0)
以下是答案:
^((?=.*[\d])(?=.*[a-z])(?=.*[A-Z])|(?=.*[a-z])(?=.*[A-Z])(?=.*[^\w\d\s])|(?=.*[\d])(?=.*[A-Z])(?=.*[^\w\d\s])|(?=.*[\d])(?=.*[a-z])(?=.*[^\w\d\s])).{8,20}$
<强> REGEXR 强>
其中:
^
- 行锚的开头((?=.*[\d])
- 检查数字(?=.*[a-z])
- 检查小写(?=.*[A-Z])
- 检查大写|(?=.*[a-z]) (?=.*[A-Z]) (?=.*[^\w\d\s])
- 检查特殊字符|(?=.*[\d]) (?=.*[A-Z]) (?=.*[^\w\d\s])|(?=.*[\d]) (?=.*[a-z]) (?=.*[^\w\d\s]))\S{8,20}
- 匹配任意字符('\S
'期望空格)来自8
行首字母20
处的字符