寻找使用以下规则验证密码的帮助:
8+ 个字符
至少包含 1 个大写字母
至少包含 1 个小写字母
至少包含 1 个数字
不能以数字开头
不包含特殊字符
我已经做到了:
(?=.*\d.*)(?=.*[a-z].*)(?=.*[A-Z].*)(?=.*[!#\$%&\?].*).{8,}
但似乎无法弄清楚如何让第一个数字不匹配数字,并将特殊字符类也设置为不匹配。任何帮助将不胜感激。
寻找使用以下规则验证密码的帮助:
8+ 个字符
至少包含 1 个大写字母
至少包含 1 个小写字母
至少包含 1 个数字
不能以数字开头
不包含特殊字符
我已经做到了:
(?=.*\d.*)(?=.*[a-z].*)(?=.*[A-Z].*)(?=.*[!#\$%&\?].*).{8,}
但似乎无法弄清楚如何让第一个数字不匹配数字,并将特殊字符类也设置为不匹配。任何帮助将不胜感激。
我发现将其分解为单独的测试是:
尝试这样的事情:
var testPassword = function (password) {
var minLengthMet = password.length >= 8,
hasUpper = (/[A-Z]+/).test(password),
hasLower = (/[a-z]+/).test(password),
hasNumber = (/[0-9]+/).test(password),
letterBegin = (/^[A-Za-z]/).test(password),
noSpecials = !(/[^A-Za-z0-9]+/).test(password);
return minLengthMet && hasUpper && hasLower && hasNumber && letterBegin && noSpecials;
};
在此处查看实际操作:http: //jsfiddle.net/H9twa/
怎么样:
pwd.length >= 8 &&
pwd.match(/[A-Z]/) &&
pwd.match(/[a-z]/) &&
pwd.match(/\d/) &&
!pwd.match(/^\d/) &&
!pwd.match(/[!#\$%&\?]/);
以防万一您需要维护此代码?
这是我会去的:
(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?!.*[!#\$%&\?])^\D.{7}
请注意,.*
每个前瞻术语之后是多余的。
(?!...)
是负前瞻,以确保没有特殊字符。
^\D
要求第一个字符是非数字。然后我只需要 7 个字符,因为结尾没有强制执行。
但是为什么要从密码中排除特殊字符呢?通常鼓励相反。