请帮帮我..我被困在这里了。。
我真正想要的是检查密码,不要重复单个字符或数字。
重复要求
aaaa=错误,
abbb=错误
abag=错误
a33f=错误
abcd1234=真实
一个字符在密码中只能有一次。如果重复多次,则返回错误。很难解释。
这是我的代码草案。
1) 首先,我需要检查是否允许重复字符的全局配置,如果允许,我的密码可以有重复字符或数字,否则就不会。之后,我需要检查是否允许小写、大写或大写的全局配置。
if($globalCOnf['repeat_pass']=="yes")//allowed
{
//do nothing
}
else //not allowed
{
//stuck here :(
if(preg_match('/(.)'1{1,}/',$user_input_pass)) //only check "aaaa" not "aba"
{
echo "change password";
}
else
{
if($globalCOnf['having_lower_upper_capital']=="yes")//allowed
{
//do nothing
}
else
{
// can't continue
}
}
}
您可以为此使用array_count_values
(一个替代的无正则表达式的解决方案)
<?php
$password = 'abcdfa';
if(max(array_count_values(str_split($password)))>1)
{
echo "Choose another password as words you can't have repeatable characters";
}
OUTPUT:
Choose another password as words you can't have repeatable characters
因为a
被重复了两次,所以得到了这个输出。
问题的答案
if($globalCOnf['repeat_pass']=="yes")//allowed
{
//do nothing
}
else //not allowed
{
if(max(array_count_values(str_split($user_pass)))>1)
{
echo "change your password now!!!";
}
else
{
if($globalCOnf['having_lower_upper_capital']=="yes")//allowed
{
//do nothing
}
else
{
if(preg_match('/[A-Z]/', $user_pass))
{
echo "Can't use uppercase";
}
}
}
}
100%工作..:)
试试这样的东西-
('d+).*'1
如果你得到任何匹配,就会有一个重复的字符。
只允许两个重复字符之间有零个或多个字符。如果匹配,则该字符串未能通过验证。
代码:(演示)
$passwords=['aaaa','abbb','abAg','a33f','abcd1234'];
foreach($passwords as $pass){
echo "$pass: ";
if(!preg_match('/([a-zA-Z'd]).*'1/',$pass)){
echo "valid'n";
}else{
echo "failed'n";
}
}
输出:
aaaa: failed
abbb: failed
abAg: valid
a33f: failed
abcd1234: valid
或作为一行:echo preg_match('/([a-zA-Z'd]).*'1/',$pass)?'failed':'valid'
使用这种类型的模式比生成一个临时字符数组并计算其出现次数并检查最高计数要直接得多。