Php Regex-防止重复字符

Php Regex-防止重复字符,php,regex,validation,Php,Regex,Validation,我花了好几个小时试图解决这个问题 这是我的正则表达式字符串: ^(?=.{4})(?!.{32})[a-zA-Z0-9\]+(\.-(\.-)*-?|-(\.-)*\)[a-zA-Z0-9\]+)*$- 你可以测试一下 以下是我试图完成的(用户名验证): 字符串长度范围->确定 字母,数字,u-。允许(-and.在用户名的开头和/或结尾不允许)->确定 需要防止重复字符(行中超过5个字符)->需要帮助 请尝试以下操作: ^(?=.{4,31}$)(?![-.])(?:(?!(.)\1{4})[-

我花了好几个小时试图解决这个问题

这是我的正则表达式字符串:
^(?=.{4})(?!.{32})[a-zA-Z0-9\]+(\.-(\.-)*-?|-(\.-)*\)[a-zA-Z0-9\]+)*$
-
你可以测试一下

以下是我试图完成的(用户名验证):

  • 字符串长度范围->确定
  • 字母,数字,u-。允许(-and.在用户名的开头和/或结尾不允许)->确定
  • 需要防止重复字符(行中超过5个字符)->需要帮助
  • 请尝试以下操作:

    ^(?=.{4,31}$)(?![-.])(?:(?!(.)\1{4})[-.\w])+(?<![-.])$
    
    ^(?=.{4,31}$)(?![-.])(?:(?!()\1{4}[-.\w])+(?)?
    例如:

    这假设您实际上指的是防止重复字符,而不是允许重复字符。

    这是:

    ^(?=.{4})(?!.{32})(?!.*(.)\1{4})\w[\w.-]+\w$
    
    使用另一个(负)向前看来处理第三个条件。这个条件将确保没有字符,后面跟着它4次

    我还通过使用表示
    [a-zA-Z0-9]
    \w
    简化了您的字符类。此外,正如F.J所指出的,您可以将前两个lookahead组合成一个:

    ^(?=.{4,31}$)(?!.*(.)\1{4})\w[\w.-]+\w$
    

    请举例说明您要匹配的字符串当前失败。很难说出“允许在内联5个字符以上重复字符”是什么意思。您是说要匹配“aaaa”而不是“aaaa”?你需要允许重复字符或阻止?+1,这比我的版本更清晰,我的版本在匹配时进行重复字符检查,而不是作为自己的前瞻。伙计,你太棒了!非常感谢你;现在我想咬自己…浪费时间害羞地问:-(没问题:)如果它解决了你的问题,请考虑接受答案(通过点击绿色复选)来显示其他人,谁可能会发现这个问题在未来,解决方案是什么。