【问题标题】:Regex-check if whole of string is a single repeating character - by PHP [duplicate]正则表达式检查整个字符串是否是单个重复字符-PHP [重复]
【发布时间】:2018-05-24 08:10:24
【问题描述】:

我想防止用户在整个用户名或密码字段中使用重复的一个字母或任何其他字符来通过 PHP 注册新用户。 我在 google 和 regex wiki 以及 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 中找不到结束分隔符 '^'

请帮我解决这个问题。

这篇文章不是我的答案,也不起作用:

match the same unknown character multiple times

Perl Regex prevent repeated characters for password policy

更新:

感谢 panter.it 有效==>~^(.)\1{1,}$~

感谢太阳能。你的建议很好。

【问题讨论】:

  • 你的代码在哪里?请显示它,以及出了什么问题和东西

标签: php regex passwords


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    为什么是正则表达式?

    你可以简单地使用

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 2012-02-19
      • 2017-05-03
      • 2020-01-29
      相关资源
      最近更新 更多