繁体   English   中英

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

[英]Need this regular expression not to require at least 1 capital letter

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

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

该正则表达式已经不需要大写字符了。 它坚持的唯一“有趣”的事情是字符串不能以相同的事物重复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. 它包含一个字符白名单而不是黑名单。 请不要将字符列入白名单。 没有理由阻止用户使用您从未想到的字符。 如果他们想使用星号,百分号,带重音的字母等怎么办? 您将出于安全原因拒绝这些字符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM