我正在尝试使用正则表达式来满足密码至少 6 个字符的最低要求;1 个大写字母、1 个小写字母和 1 个数字。看起来很容易吗?我没有任何正则表达式“向前看”的经验,所以我会这样做:
if(!pwStr.match(/[A-Z]+/) || !pwStr.match(/[a-z]+/) || !pwStr.match(/[0-9]+/) ||
pwStr.length < 6)
//was not successful
Run Code Online (Sandbox Code Playgroud)
但我想将其优化为一个正则表达式,并在此过程中提高我的正则表达式技能。
跟进PHP正则表达式以将字母数字字符串与某些(但不是全部)标点符号匹配,我必须接受至少2种类型的字符,这些字符必须是数字,字母或标点之一,而字符串必须介于长度为6和18个字符。这是最好的方法吗?我使用RegExLib的模式构造了此正则表达式。
preg_match('@' .
// one number and one letter
'^(?=.*\d)(?=.*[a-zA-Z])[!-%\'-?A-~]{6,18}$' .
// one number and one punctuation
'|^(?=.*\d)(?=.*[!-%\'-/:-?\[-`{-~])[!-%\'-?A-~]{6,18}$' .
// or one punctation and one
'|^(?=.*[!-%\'-/:-?\[-`{-~])(?=.*[a-zA-Z])[!-%\'-?A-~]{6,18}$' .
'@i', $pass, $matches);
Run Code Online (Sandbox Code Playgroud)