use*_*560 3 php regex passwords validation
我使用这个(几乎)复杂的密码验证:
function is_password($password) {
return preg_match("^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,20}$", $password);
}
Run Code Online (Sandbox Code Playgroud)
所以它必须包含:
这似乎不起作用.每当我键入某些字符,如e,t,o,j,c和b; 如果允许的长度正确,则该函数返回true.所以大写和数字没有被验证..
我究竟做错了什么?
你忘了使用分隔符.请改用此代码:
return preg_match("/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,20}$/", $password);
Run Code Online (Sandbox Code Playgroud)
或者您可以拆分每个条件并使用此代码:
return mb_strlen($password)>=6 && mb_strlen($password)<=20
&& preg_match("/[a-z]+/", $password) && preg_match("/[A-Z]+/", $password)
&& preg_match("/[0-9]+/", $password);
Run Code Online (Sandbox Code Playgroud)
小智 6
我会把它分成多个检查.这将允许您智能地向用户(或日志)提供关于密码选择失败原因的反馈.
<?php
function is_password($password){
if (strlen($password) < 6) {
// too short
return false;
}
if (strlen($password) > 20) {
// too long
return false;
}
if (!preg_match("/[A-Z]/", $password) {
// no upper
return false;
}
if (!preg_match("/[a-z]/", $password) {
// no lower
return false;
}
if (!preg_match("/[0-9]/", $password) {
// no digit
return false;
}
return true;
}
?>
Run Code Online (Sandbox Code Playgroud)