我想只允许密码:
包含a-z / A-Z / 0-9
包含1个字母和1个数字(我测试密码< 8代码中的其他地方)
atm这就是我所拥有的:
function invalid($pass){
return (bool) preg_match('Some pattern???', $pass);
}
我已经找到了答案,但我不知道这些模式是如何运作的。因此,我无法修改包含我的验证需要的某些元素的模式。
编辑: 我现在有了这个
function invalid($pass){
if(preg_match("^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,16}$", $pass)) {
return true;
} else {
return false;
}
}
但它拒绝我输入的每个密码,甚至:Test1234(1个大写,1个小写,1个字母,8个字符)
答案 0 :(得分:1)
这就是你想要的:
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,16}$
这将使密码必须包含至少一个大写字母,一个小写字母和一个数字。
如果你真的只想要一个字母,一个数字,那就取出(?=.*[A-Z])
部分。
此外,为了将来参考,请检查this library。 上面的正则表达式来自here.
为了清楚起见,你会在它周围使用斜杠:
preg_match("/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,16}$/", $pass)
或者,更详细地说:
$pass = "GoodPassword123";
echo preg_match("/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,16}$/", $pass) ? "Password is good" : "Password is bad";
答案 1 :(得分:0)
这应该做的工作:
preg_match('/^[a-zA-Z0-9]*([a-zA-Z][0-9]|[0-9][a-zA-Z])[a-zA-Z0-9]*$/', $pass);
一些解释:
^匹配行的开头
[a-zA-Z0-9] *匹配一个任意长度的字符串(可以是一个空字符串),只包含字符a-Z,A-Z,0-9
([a-zA-Z] [0-9] | [0-9] [a-zA-Z])匹配一个字母后跟一个数字或反之亦然
$匹配行尾