RegExp忽略特殊和重复的字符(用户名测试)

时间:2015-08-12 19:20:21

标签: regex

全部, 我正在尝试构造一个正则表达式(我将用于测试有效的用户名):

1123@sssssasdf sslkdf*.sf...____.__sfsfdddddsss

并根据此字符串对其进行测试:

{{1}}

这个正则表达式应该测试的是:

  1. 字符串不应以数字,下划线或点
  2. 开头
  3. 字符串应为字母数字
  4. 不应包含重复三次或更多次的字符 - 这是失败的
  5. 不应包含下划线和点在一起
  6. 不应包含点和下划线
  7. 不应包含重复的点不应包含重复的下划线
  8. 看起来所有案例都匹配但是第3名。它不会捕获重复三次或更多次的重复字符。

    我的问题是:

    1. 如何修复此正则表达式以便捕获重复的字符?
    2. 如何优化此正则表达式?
    3. 提前致谢

      修改 根据要求,有效字符串为:

      1. 约翰
      2. john.snow
      3. john.snow123
      4. john1.snow1
      5. john_snow
      6. john_snow123
      7. john1_snow1
      8. 无效字符串为:

        1. 123
        2. 1john.snow
        3. .john_snow
        4. john__snow
        5. john..snow
        6. jjjohn.snow
        7. _john_snow

2 个答案:

答案 0 :(得分:1)

也可以这样做 -

<br/>

Formatted:

(?i)^(?=[a-z])(?!.*?(?:\._|_\.|\.{2}|_{2}|([a-z\d])\1{2}))[a-z\d._]+$

答案 1 :(得分:0)

^(?![0-9_.])(?!.*([._])\1)(?!.*(?:_\.|\._))(?!.*(.)\2{2,})[\w.]+$

您可以为每个条件添加negative lookahead。参见演示。

https://regex101.com/r/rO0yD8/6