【问题标题】:Regex for validating username [duplicate]用于验证用户名的正则表达式 [重复]
【发布时间】:2021-02-26 01:00:23
【问题描述】:

我已经尝试了很多正则表达式模式,但我找不到一个完美的正则表达式,它可以执行以下操作(最少 3 个字符,最多 30 个字符,可以允许特殊字符,如果所有字符都只是特殊字符,它应该返回 false )。

期望:

  1. "ben":true,(满足 3 个字符)
  2. "ab":false,(不满足 3 个字符)
  3. "ben franklin":true,(可以留空格)
  4. "ben_franklin":true,(可以允许特殊字符)
  5. "ben@:true,(满足特殊字符和最少 3 个字符)
  6. "%#$":false,(虽然是 3char ,但都是特殊字符)
  7. “本#franklin”:真,
  8. "be'franklin":true
  9. "&%^$@#!*&^":false

【问题讨论】:

  • 我想如果你连续有 10 个特殊字符也是假的? "&%^$@#!*&^":false?
  • @xdhmoore 是的,应该是假的
  • 是否需要你只用一个正则表达式来解决它?如果将任务拆分为两个正则表达式,问题就会变得容易得多。首先列入白名单(检查它是否只有您想要的字符和所需长度)并接受它们,然后将它们列入黑名单(检查字符串是否仅包含特殊字符)并拒绝那些
  • @SamridhTuladhar 这也是我要建议的。

标签: javascript regex


【解决方案1】:

如果“特殊字符”是指任何非字母数字字符,则可以使用以下模式:

^(?=.*[A-Za-z0-9]).{3,30}$

Demo.

细分:

^                   # Beginning of the string.
(?=.*[A-Za-z0-9])   # Must contain at least one alphanumeric (English) character.
.{3,30}             # Match any character (special or not) between 3 and 30 times.
$                   # End of string.

进一步调整:

  • 如果您想在“非特殊字符”中添加更多字符,您可以在字符类中添加它们。例如,要添加空格字符,您可以使用[A-Za-z0-9 ]

  • 如果您想将“特殊字符”限制为一组特定的字符,则可以将.{3,30} 替换为[A-Za-z0-9@#$%....]{3,30}

【讨论】:

    【解决方案2】:

    我可能只需要 2 遍就可以做到这一点:

    let str = "ben#franklin";
    let result = !!(str.match(/^[a-z\s!@#$%^&_-]{3,30}$/g) && str.match(/^.*[a-z].*$/g));
    console.log(result);
    
    1. 检查有效字符。
    2. 确保至少有一个 a-z 字符。

    你没有提到数字或大写字符,所以我没有添加它们。

    【讨论】:

      猜你喜欢
      • 2011-06-09
      • 2021-10-29
      • 2021-09-06
      • 2012-08-14
      • 2011-05-16
      • 2011-10-10
      • 1970-01-01
      • 1970-01-01
      • 2017-10-04
      相关资源
      最近更新 更多