我目前正在用regex做一些测试。我有一个练习,要求检查强密码,这意味着它应该有:至少一个数字,一个小写字母,一个大写字母,没有空格,至少一个非字母或数字的字符。并且它应该在8-16个字符之间。
我写了这段代码:
<?php
$passwords = array("Jtuhn", "12J@k", "jok", "Joan 12@45", "Jghf2@45", "Joan=?j123j");
foreach($passwords as $pass)
{
///^\w*(?=\w*\d)(?=\w*[a-z])(?=\w*[A-Z])\w*$/
if(strlen($pass) >= 8 && strlen($pass) < 17)
{
if(preg_match("/^\w*(?=\w*\d)(?=\w*[A-Z])(?=\w*[^0-9A-Za-z])(?=\w*[a-z])\w*$/", $pass) )
echo "$pass => MATCH<br>";
else
echo "$pass => FAIL<br>";
}
else
echo "$pass => FAIL(because of length)<br>";
}
?>
最后两个应该匹配,但他们失败了。我认为问题在于
(?=\w*[^0-9A-Za-z])
这应该是模式匹配,至少有一个字符不是字母或数字,但我不知道为什么。我知道这个强密码在互联网上解决,但这不是我的问题。我的问题是为什么这部分工作不做应该做的事情。
6条答案
按热度按时间xytpbqjk1#
您可以将正则表达式拆分为不同的检查。
它将允许您编写更可读的条件并显示特定的错误消息。尽管如此,regexp模式将更容易编写和理解。
即:
希望有帮助。
1dkrff032#
你可以试试这个:
它能满足你所有的要求
Explanation
(?=.*\d)
至少一位数字(?=.*[a-z])
至少一个小写字母(?=.*[A-Z])
至少一个大写字母(?!.* )
无空格(?=.*[^a-zA-Z0-9])
除a-zA-Z0-9
外至少有一个字符.{8,16}
介于8到16个字符之间样本代码:
Run it here
wgeznvg73#
drkbr07n4#
使用这个简单的正则表达式来测试强密码
Javascript:
1.最小长度8个字符
1.至少1个大写字母
1.至少1个小写字母
1.至少1个特殊字符
1.至少1位数字
vqlkdk9b5#
根据要求添加特殊字符。
以上代码检查以下条件
Click here to test
r7knjye26#
使用下面的代码创建强密码。密码必须包含8个字符,并且可以混合使用字母(大小写)、数字和符号:
$pswrdChk = '测试@123';
如果(!preg_match('/^(?=.[\W])(?=.[a-z])(?=.[A-Z])(?=.[0-9]).{8,50}$/',$pswrdChk))
{
echo“至少使用8个字符以及字母(大写和小写)、数字和符号的组合。";
}
否则
{
echo“密码有效”;
}