使用以下规则寻找验证密码的帮助:
8+个字符
包含至少1个大写字母
包含至少1个小写字母
包含至少1个数字
无法以数字开头
不包含特殊字符
我得到了:
(?=.*\d.*)(?=.*[a-z].*)(?=.*[A-Z].*)(?=.*[!#\$%&\?].*).{8,}
但似乎无法弄清楚如何让第一个数字与数字不匹配,并将特殊字符类设置为不匹配。任何帮助将不胜感激。
答案 0 :(得分:4)
我发现将其分解为单独的测试是:
尝试这样的事情:
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/
答案 1 :(得分:3)
以下是我要采用的内容:
(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?!.*[!#\$%&\?])^\D.{7}
请注意,每个前瞻术语后的.*
都是多余的。
(?!...)
是一个负面的预测,以确保没有特殊字符。
^\D
要求第一个字符为非数字。然后我只需要7个字符,因为结尾没有强制执行。
但为什么要从密码中排除特殊字符?通常情况恰恰相反。
答案 2 :(得分:3)
怎么样:
pwd.length >= 8 &&
pwd.match(/[A-Z]/) &&
pwd.match(/[a-z]/) &&
pwd.match(/\d/) &&
!pwd.match(/^\d/) &&
!pwd.match(/[!#\$%&\?]/);
以防您需要维护此代码吗?