【问题标题】:Need to prevent repeating characters using RegEx需要使用 RegEx 防止重复字符
【发布时间】:2015-02-15 13:58:27
【问题描述】:

如何使用 RegEx 测试以下模式:

  1. 字符串长度必须为 4-10 个字符
  2. 字符串不能有任何重复 字符(两个字符不能相同且相邻)

我对此进行了研究,我认为我很接近:

^(?!(.)\1).{4,10}$

这将正确找到ab1212ab 的匹配项。它还正确拒绝了1111aaaa。但是它错误地接受了12aaab11

它似乎只寻找字符串开头的重复字符。我试图移动或删除^$,但我需要它们来进行最大字符检查。我还尝试了(.)\1 的几种变体来查找重复字符,但没有运气。

任何帮助或提示将不胜感激。

PS - 如果有人知道答案,我实际上希望最多允许一对重复字符,但我认为这太难了,并决定禁止任何重复字符。

【问题讨论】:

    标签: regex string match string-matching


    【解决方案1】:

    您可以在前瞻断言内的捕获组之前使用贪婪量词。

    .* 匹配字符串末尾的所有字符。

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

    【讨论】:

    • 感谢 hwnd!这对我有用,我可以添加其他限制。我想让问题保持简单,但我的最终表达是 ^(?!.*(.)\1.*(.)\2)(?=(.*[a-zA-Z]){2}) (?=.*[0-9]).{4,10}$
    • 保罗,非常感谢您提供的额外提示。我添加了你的调整,它工作得很好。
    【解决方案2】:

    在我看来,最好的方法是:

    ^(?:(.)(?!\1)){4,10}$
    

    为什么是长字符串会更快失败。

    【讨论】:

    • pguardiario 感谢您的出色回答。这确实适用于我提出的问题,我相信它会更快。但是我更喜欢 hwnd 提供的答案,因为我可以扩展它。
    猜你喜欢
    • 1970-01-01
    • 2017-12-10
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 2015-06-25
    • 1970-01-01
    相关资源
    最近更新 更多