现在写下面的正则表达式需要大写字母。我刚刚被告知大写字母是可选的但不是必需的。如何在不更改任何其他参数的情况下编写此正则表达式,以使至少不需要一个大写字母。
/^(?:(?!([a-zA-Z0-9-().&@?""#,+''\s\/])\1\1)[a-zA-Z0-9-().&@?""#,+''\s\/]){7,}$/
答案 0 :(得分:4)
该正则表达式已经不需要大写字符。它坚持的唯一“有趣”的东西是字符串不能以重复3次相同的东西开始(相同的字符),整个字符串需要至少7个字符长。
此外,正则表达式中单引号和双引号字符的加倍也是不必要的。
答案 1 :(得分:3)
正则表达式中没有任何内容需要大写字母。该正则表达式的要求是:
-().&@?"#,+'
,空格或/
。如果我没弄错,这似乎用于密码验证。由于几个原因,这对正则表达式的使用很差。
很难读懂。正则表达式检查的是什么?这大块人物实际上做了什么?如果你不是正则表达专家,那就是胡言乱语。
有一些要求塞满了一个大的正则表达式。如果将检查分成几行代码,它将更容易阅读并且更易于维护:
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.
它包含字符白名单而不是黑名单。请不要将字符列入白名单。没有理由阻止用户使用您没有想到的字符。如果他们想使用星号,百分号,重音字母等怎么办?出于安全原因,你将拒绝这些角色。