Php 正则表达式检查重复字符或数字,检查小写、大写、大写

Php 正则表达式检查重复字符或数字,检查小写、大写、大写,php,regex,Php,Regex,请帮帮我,我被困在这里了 我真正想要的是检查密码是否重复使用单个字符或数字 重复要求 aaaa=假 abbb=false abag=假 a33f=错误 abcd1234=真 密码中应包含的字符只有一次。如果重复多次,则返回错误。很难解释 这是我的代码草案 1) 首先,我需要检查是否允许重复字符的全局配置,如果允许,我的密码可以有重复字符或数字,否则它不会。之后,我需要检查是否允许对小写、大写或大写进行全局配置 if($globalCOnf['repeat_pass']=="yes")//allo

请帮帮我,我被困在这里了

我真正想要的是检查密码是否重复使用单个字符或数字

重复要求

aaaa=假

abbb=false

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\u count\u value
(一种替代的无正则表达式解决方案)


您得到该输出是因为
a
重复了两次。

尝试类似的方法-

(\d+).*\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%工作:)

只允许两个重复字符之间有零个或多个字符。如果存在匹配项,则字符串无法通过验证

代码:()

输出:

aaaa: failed
abbb: failed
abAg: valid
a33f: failed
abcd1234: valid
或者作为一行:
echo preg_match('/([a-zA-Z\d]).\1/',$pass)?“失败”:“有效”


使用这种类型的模式比生成一个临时字符数组并计算它们的出现次数并检查最高计数要直接得多。

我认为应该是
preg_match('/()\1{2,}
,因为该字母应该至少重复一次,因此,使用{2,}不起作用。这个字符串“abata”怎么样.Password不能有一个以上的单个字符或数字。请参阅requirement.yes。它可以工作。但是,检查小写、大写和大写的最后一个条件如何?@metallic,
A
A
是不同的字符。是否将它们视为相同的字符?如果是,请使用@ghoti,这样可以工作,但可以e如果有人认为他们的密码是Abcde123,并以Abcde123的身份输入数据库,然后想使用Abcde123登录,则会出现问题;这是一种无法排除的可能性。需要一个指示器,说明检测到了大写字母。类似这样的情况会首先检测是否存在大写字母
if(preg_match('/[a-Z]/“,$password”)
如果未检测到脚本的其余部分,则继续执行脚本的其余部分;简短、甜蜜且专为速度而构建;-)请友好地使用Internet,并且。很高兴您能够使用它+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";
         }
     }

  }

}
$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