需要此正则表达式不要求至少1个大写字母

时间:2011-01-19 21:43:04

标签: javascript regex

现在写下面的正则表达式需要大写字母。我刚刚被告知大写字母是可选的但不是必需的。如何在不更改任何其他参数的情况下编写此正则表达式,以使至少不需要一个大写字母。

/^(?:(?!([a-zA-Z0-9-().&@?""#,+''\s\/])\1\1)[a-zA-Z0-9-().&@?""#,+''\s\/]){7,}$/

2 个答案:

答案 0 :(得分:4)

该正则表达式已经不需要大写字符。它坚持的唯一“有趣”的东西是字符串不能以重复3次相同的东西开始(相同的字符),整个字符串需要至少7个字符长。

此外,正则表达式中单引号和双引号字符的加倍也是不必要的。

答案 1 :(得分:3)

正则表达式中没有任何内容需要大写字母。该正则表达式的要求是:

  • 至少7个字符。
  • 仅包含大写和小写字母,数字0-9,符号-().&@?"#,+',空格或/
  • 不以3行相同的字符开头。 (作者可能打算将此检查应用于整个密码,但事实并非如此。)

如果我没弄错,这似乎用于密码验证。由于几个原因,这对正则表达式的使用很差。

  1. 很难读懂。正则表达式检查的是什么?这大块人物实际上做了什么?如果你不是正则表达专家,那就是胡言乱语。

  2. 有一些要求塞满了一个大的正则表达式。如果将检查分成几行代码,它将更容易阅读并且更易于维护:

    if (password.length < 7)                  reject("Too short.");
    if (numRepeatedCharacters(password) >= 3) reject("Too repetitive.");
    if (numDigits(password) < 1)              reject("Digit required.");
    if (numSymbols(password) < 1)             reject("Symbol required.");
    // etc.
    
  3. 它包含字符白名单而不是黑名单。请不要将字符列入白名单。没有理由阻止用户使用您没有想到的字符。如果他们想使用星号,百分号,重音字母等怎么办?出于安全原因,你将拒绝这些角色。

相关问题