【问题标题】:Validating userName using Regex使用正则表达式验证用户名
【发布时间】:2017-10-04 06:29:04
【问题描述】:
  1. 用户名中唯一的数字必须在末尾。最后可以有零个或多个。

  2. 用户名字母可以是小写和大写。

  3. 用户名必须至少有两个字符长。两个字母的用户名只能使用字母字符。

我正在尝试这个,但我停滞不前了。 /\d+$\w+/gi

【问题讨论】:

  • 根据经验,不要使用用户名,只需使用电子邮件和显示名称(他们可以为他们输入任何他们想要的名称)。没有人愿意为另一个站点维护另一个用户名。此外,对于用户名,您最终不得不单独报告每个验证失败(用户名太长,用户名需要大写,等等等等)。只是“用户名无效”是一个糟糕的用户体验。是什么使它无效?跳过它,使用电子邮件。

标签: javascript regex


【解决方案1】:

/^[a-z]{2,}\d*$/i 是:

^     : the begining
[a-z] : a character (a to z), you can add as many allowed characters as you want
{2,}  : at least 2 of them
\d*   : 0 or more digits 
$     : the end
i     : ignore case sensetivity (both lowercases and uppercases are allowed)

【讨论】:

    【解决方案2】:

    用户名包含字符和数字,最少 2 个字符

    /^[a-zA-Z]{2,}\d*$/i
    

    测试结果:

    UserNam9 = pass
    9username = fail
    Userna99 = pass
    usernameeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee = pass
    Us = pass
    U = fail
    

    【讨论】:

    • 这个正则表达式是错误的,它有几个问题。首先,通过这种方式,您也可以在开头允许数字。然后 i 如果你指定 a-zA-Z 就没用了。如果你只使用 a-z 是有意义的。此外,通过这种方式,您也只接受两个数字。
    • 什么?你是对的,[a-zA-Z] 是不必要的,不是错的,而是不必要的。但其余的都是对的……
    【解决方案3】:
    /^[A-z]{2,}[A-z0-9]{0,}$/
    /^ // start of line
    [A-z]{2,} //alphabet characters 2 or more
    [A-z0-9]{0,} //numbers and alphabet 
    $/ // end of line
    

    【讨论】:

      【解决方案4】:

      如果开头有一个字母,后跟 2 个或更多数字,则您错过了案例。

      U99 = fail
      d345 = fail
      

      我的解决方案也通过了这些测试:

      /^[a-z]{2,}\d*$|(?=\w{3,})^[a-z]{1,}\d+$/i
      

      使用正向前瞻,我确保在第二种情况下至少有 3 个字母数字字符。

      【讨论】:

        【解决方案5】:

        /^[a-z]{2,}\d*$|(?=\w{3,})^[a-z]{1,}\d+$/i的简化版:

        /^\D(\d{2,}|\D+)\d*$/i
        

        代码说明:

        1. ^ - 输入开始
        2. \D - 第一个字符是字母
        3. \d{2,} - 以两个或更多数字结尾
        4. | - 或
        5. \D+ - 下一个或多个字母
        6. \d* - 以零个或多个数字结尾
        7. $ - 输入结束
        8. i - 忽略输入的大小写

        【讨论】:

          【解决方案6】:

          这是我的答案,它通过了所有测试:

          /^[a-z][a-z]+\d*$|^[a-z]\d{2,}$/i
          
          • 第一部分:2 个字母(或更多)和零个或多个数字
          • 或者
          • 第二部分:1 个字母和 2 个或更多数字

          【讨论】: