【问题标题】:Regex to validate username in Javascript正则表达式在 Javascript 中验证用户名
【发布时间】:2020-04-25 21:38:07
【问题描述】:

以下是我尝试根据下面提到的标准验证的正则表达式,但在某些情况下它失败了。让我知道我在这里做错了什么。

正则表达式-

/[a-z]|\d|\_{4, 16}$/.test(username)

标准 -

允许的字符是:

  • 小写字母
  • 数字
  • 下划线
  • 长度应介于 4 到 16 个字符之间(均包括在内)。

代码

function validateUsr(username) {
  res =  /[a-z]|\d|\_{4, 16}$/.test(username) 
  return res
}

console.log(validateUsr('asddsa')); // Correct Output - true
console.log(validateUsr('a')); // Correct Output - false
console.log(validateUsr('Hass')); // Correct Output - false
console.log(validateUsr('Hasd_12assssssasasasasasaasasasasas')); // Correct Output - false
console.log(validateUsr('')); // Correct Output - false
console.log(validateUsr('____')); // Correct Output - true
console.log(validateUsr('012')); // Correct Output - false
console.log(validateUsr('p1pp1')); // Correct Output - true
console.log(validateUsr('asd43 34')); // Correct Output - false
console.log(validateUsr('asd43_34')); // Correct Output - true

【问题讨论】:

    标签: javascript html regex reactjs ecmascript-6


    【解决方案1】:

    您可以将模式加入单个字符类并将限制量词应用于该类,而不仅仅是_ 模式。请注意,空格在模式中是有意义的,{4, 16} 匹配 {4, 16} 字符串,它不会被解析为量词。

    你可以使用

    var regex = /^[a-z\d_]{4,16}$/;
    function validateUsr(username) {
      return regex.test(username) 
    }
    
    console.log(validateUsr('asddsa')); // Correct Output - true
    console.log(validateUsr('a')); // Correct Output - false
    console.log(validateUsr('Hass')); // Correct Output - false
    console.log(validateUsr('Hasd_12assssssasasasasasaasasasasas')); // Correct Output - false
    console.log(validateUsr('')); // Correct Output - false
    console.log(validateUsr('____')); // Correct Output - true
    console.log(validateUsr('012')); // Correct Output - false
    console.log(validateUsr('p1pp1')); // Correct Output - true
    console.log(validateUsr('asd43 34')); // Correct Output - false
    console.log(validateUsr('asd43_34')); // Correct Output - true

    ^[a-z\d_]{4,16}$ - see its demo - 模式表示:

    • ^ - 字符串开头
    • [ - 字符类的开始:
      • a-z - ASCII 小写字母
      • \d - ASCII 数字
      • _ - 下划线
    • ]{4,16} - 课程结束,重复四到十六次
    • $ - 字符串结束。

    【讨论】:

    • /^[a-z\d_]{4,16}$/中的^是什么意思?
    • @Nesh 我添加了详细信息。