PHP密码复杂性检查器代码不工作
我有下面的PHP代码,它试图检查密码的复杂性,但是当我运行它时,我似乎没有得到有效的结果(见下文)PHP密码复杂性检查器代码不工作,php,passwords,complexity-theory,Php,Passwords,Complexity Theory,我有下面的PHP代码,它试图检查密码的复杂性,但是当我运行它时,我似乎没有得到有效的结果(见下文) while(odbc获取行($rs)){ $r1='/[A-Z]/';//大写 $r2='/[a-z]/';//小写 $r3='/[!@$%^&*()-\=+{};:,]/'//不管你说的“特殊字符”是什么意思 $r4='/[0-9]/';//数字 如果(!preg_match_all($r4,odbc_结果($rs,“U_密码”)){ echo“密码不包含数字:”.odbc\U结果($rs,“U
while(odbc获取行($rs)){
$r1='/[A-Z]/';//大写
$r2='/[a-z]/';//小写
$r3='/[!@$%^&*()-\=+{};:,]/'//不管你说的“特殊字符”是什么意思
$r4='/[0-9]/';//数字
如果(!preg_match_all($r4,odbc_结果($rs,“U_密码”)){
echo“密码不包含数字:”.odbc\U结果($rs,“U\U邮箱”)。“@”.odbc\U结果($rs,“U\U域”)。“.odbc\U结果($rs,“U\U密码”)。“
\n”;
}
如果(!preg_match_all($r2,odbc_结果($rs,“U_密码”)){
echo“密码不包含小写字母:“.odbc\U结果($rs,“U\U邮箱”)。@”.odbc\U结果($rs,“U\U域”)。“.odbc\U结果($rs,“U\U密码”)。”
\n;
}
如果(!preg_match_all($r1,odbc_结果($rs,“U_密码”)){
echo“密码不包含大写字母:”.odbc\U结果($rs,“U\U邮箱”)。“@”.odbc\U结果($rs,“U\U域”)。“.odbc\U结果($rs,“U\U密码”)。”
\n;
}
}
输出:
密码不包含小写字母:jason@domain.com小写字母EPW密码中没有足够的数字:service@domain.com8B_倾角+3
密码不包含大写字母:barry@domain.com Barrywidg@t1o
(顺便说一句,上面的密码不是真的。我只是简单地用小写字母替换其他小写字母,用大写字母替换其他大写字母,用数字替换其他数字。) 所以我很困惑为什么我的代码不起作用。还有谁能帮忙吗 谢谢 布拉德
preg\u match\u all
更改为preg\u match
/[\!@\$%\^&*\(\)-\=+\{\};:,]/
虽然…
preg\u match\u all
接受三个参数,而不是两个:第三个参数是对将填充匹配项的数组的引用,但不能保证这是问题的100%。使用preg\u match
此外,如果这些特殊字符是PCRE语法的一部分,请确保它们被转义(例如:\.
而不是
)
我建议您增加
error\u reporting
和/或激活display\u errors
和/或错误日志。如果你有,这是一个会被抓到的东西,因为它会抛出一个E_警告错误。在将你的示例转换为独立代码后(请以后发布)
我得到了一堆这样的东西:
PHP警告:preg_match_all()至少需要3个参数,第9行的/Users/cabbey/foo.PHP中给出了2个
您可能应该打开错误报告
我假设,由于您使用了_all,所以您希望对它们进行计数,在这种情况下,您希望将regexp更改为不贪婪
$r1='/[A-Z]{1}/'; //Uppercase
$r2='/[a-z]{1}/'; //lowercase
$r3='/[!@#$%^&*()_=+{};:,<.>-]{1}/'; // whatever you mean by 'special char'
$r4='/[0-9]{1}/'; //numbers
$found = array();
foreach (array('lowercasepw', '8B_dip+3', 'Barrywidg@t1o') as $pass) {
if (!preg_match_all($r4, $pass, $found)) {
echo "Password doesn't contain numbers: $pass\n";
} else {
echo "found ".count($found[0])." numbers\n";
}
if (!preg_match_all($r2,$pass, $found)) {
echo "Password doesn't contain lowercase letters: $pass\n";
} else {
echo "found ".count($found[0])." lowercase\n";
}
if (!preg_match_all($r1, $pass, $found)) {
echo "Password doesn't contain uppercase letters: $pass\n";
} else {
echo "found ".count($found[0])." uppercase\n";
}
}
$r1='/[A-Z]{1}/'//大写字母
$r2='/[a-z]{1}/'//小写字母
$r3='/[!@$%^&*(),-]{1}/'/不管你说的“特殊字符”是什么意思
$r4='/[0-9]{1}/'//数字
$found=array();
foreach(数组('lowercaseepw','8B_dip+3','Barrywidg@t1o“)作为$pass){
如果(!preg_match_all($r4,$pass,$found)){
echo“密码不包含数字:$pass\n”;
}否则{
回显“已找到”。计数($found[0])“数字\n”;
}
如果(!preg_match_all($r2,$pass,$found)){
echo“密码不包含小写字母:$pass\n”;
}否则{
echo“found”.count($found[0])“小写\n”;
}
如果(!preg_match_all($r1,$pass,$found)){
echo“密码不包含大写字母:$pass\n”;
}否则{
echo“found”.count($found[0])“大写\n”;
}
}
谢谢-似乎就是这样。谢谢,我检查了phperor.log,但可能我没有将日志设置得足够高。
$r1='/[A-Z]{1}/'; //Uppercase
$r2='/[a-z]{1}/'; //lowercase
$r3='/[!@#$%^&*()_=+{};:,<.>-]{1}/'; // whatever you mean by 'special char'
$r4='/[0-9]{1}/'; //numbers
$found = array();
foreach (array('lowercasepw', '8B_dip+3', 'Barrywidg@t1o') as $pass) {
if (!preg_match_all($r4, $pass, $found)) {
echo "Password doesn't contain numbers: $pass\n";
} else {
echo "found ".count($found[0])." numbers\n";
}
if (!preg_match_all($r2,$pass, $found)) {
echo "Password doesn't contain lowercase letters: $pass\n";
} else {
echo "found ".count($found[0])." lowercase\n";
}
if (!preg_match_all($r1, $pass, $found)) {
echo "Password doesn't contain uppercase letters: $pass\n";
} else {
echo "found ".count($found[0])." uppercase\n";
}
}