我正在尝试在PHP中进行检查,如果用户更改了他们的密码,他们的新密码必须是8个或更多字符且至少有1个非字母数字密码。我该怎么检查这个以及正则表达式是什么?
检查长度是容易的部分strlen >= 8
。我的问题是正则表达式。即使经过多年的计算机科学研究,我对正则表达式也一无所知。
谢谢
答案 0 :(得分:5)
尝试这样的方法来检查它们是否使用了非字母数字字符:
if( !preg_match( '/[^A-Za-z0-9]+/', $password) || strlen( $password) < 8)
{
echo "Invalid password!";
}
如果if
不包含至少一个不在列表中的字符(字母数字字符),则true
语句将评估为$password
。
答案 1 :(得分:0)
这应该有效(未经测试)
if (preg_match('/^(?=.*[\W])(?=[a-z0-9])[\w\W]{8,}$/i', '123abc!$'))
{
//error
}
确保密码长度为8个字符且至少有一个特殊字符
答案 2 :(得分:0)
如果使用strlen / mb_strlen检查字符串长度,则只需编写正则表达式即可匹配任何非字母数字字符。如果它匹配一个(或更多),你就是好的。例如:
$password = 'asdf123!';
if(mb_strlen($password) >= 8 and preg_match('/[^0-9A-Za-z]/', $password))
{
// password is valid
}
答案 3 :(得分:0)
据我所知,你无法实现这一点,因为它是一个复合条件场景。
您需要做的是以三步方式完成:
$has8characters = (mb_strlen($_REQUEST['password']) >= 8);
$hasAlphaNum = preg_match('b[a-z0-9]+bi', $_REQUEST['password']);
$hasNonAlphaNum = preg_match('b[\!\@#$%\?&\*\(\)_\-\+=]+bi', $_REQUEST['password']);
这没有经过测试,但你已经非常接近你想要实现的目标......
祝你好运答案 4 :(得分:0)
试试这个。
~^(.*[\W]+.*){8,}$~
答案 5 :(得分:0)
这解决了它。试一试!
if(!preg_match('/^(?=.*\d)(?=.*[A-Za-z])[0-9A-Za-z!@#$%]{8,}$/', $pass)) {
echo "Password does not meet the requirements! It must be alphanumeric and atleast 8 characters long";
}