我真正想要的是检查重复单个字符或数字的密码。
重复
的要求aaaa = false,
abbb = false
abag = false
a33f = false
abcd1234 = true
一个角色只有一次应该有密码。如果不止一次重复,则返回错误。很难解释。
这是我的草稿代码。
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
}
}
}
答案 0 :(得分:3)
您可以使用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
重复了两次。
答案 1 :(得分:1)
回答问题。
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%工作..:)
答案 2 :(得分:0)
尝试这样的事情 -
(\d+).*\1
如果你得到任何匹配,就会有重复的角色。
答案 3 :(得分:0)
在两个重复字符之间只允许零个或多个字符。如果匹配,则字符串无法通过验证。
代码:(Demo)
$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'
使用这种类型的模式更直接的是生成一个临时的字符数组并计算它们的出现次数并检查最高计数。