正则表达式 - 检查整个字符串是否是一个重复的字符 - 由PHP

时间:2017-12-10 18:38:42

标签: php regex passwords username

我希望阻止用户在整个用户名或密码字段中使用重复的一个字母或任何其他字符,以便通过PHP注册新用户。 我搜索谷歌和正则表达式维基和stackoverflow和regex101但我找不到我的答案。

用户名和密码字符的最小长度为8。

  

规则:

     用于注册新用户的用户名或密码字段中的

  11111111,111111111111,22222222,222222222222,...,AAAAAAAA,AAAAAAAAAAAA,BBBBBBBB,...,zzzzzzzz,... @@@@@@@@,********   ,&&&&&&&& ...应该无效   但   11111113,22222221,...,aaaaaaab,baaaaaaa,...,zzzczzzz,... @@@ 1 @@@@,2 *******   ,&&&&& n&& ...应该有效。

我发现了这种模式,但不起作用并发出警告:

 pattern1:    ^(?!.*(.)\1).{*}$
 pattern2:    ^(.)\1{1,}$
  

警告是这样的:

     

警告:preg_match():在第70行的C:... \ test.php中找不到结尾分隔符'^'

请帮我解决这个问题。

这些帖子不是我的回答而且不起作用:

ast.literal_eval

match the same unknown character multiple times

更新:

谢谢panter.it的工作原理==>〜^(。)\ 1 {1,} $〜

谢谢solarc。你的建议很好。

2 个答案:

答案 0 :(得分:4)

在PHP preg_ *函数中,模式必须有分隔符。使用之后是~,但它可以是任何东西。

~^(?!.*(.)\1).{*}$~
~^(.)\1{1,}$~

如果您可以使用在正则表达式中用作分隔符的字符,则需要将其转义。

答案 1 :(得分:4)

为何选择正则表达式?

你可以简单地使用

if ($mystring === str_repeat($mystring[0], strlen($mystring))) {
    // invalid
}