下面的正则表达式现在写成需要大写字母。我刚才被告知大写字母是可选的,但不是必需的。如何在不改变任何其他参数的情况下编写这个正则表达式来不至少需要一个大写字母。需要此正则表达式不要求至少有1个大写字母
/^(?:(?!([a-zA-Z0-9-().&@?""#,+''\s\/])\1\1)[a-zA-Z0-9-().&@?""#,+''\s\/]){7,}$/
下面的正则表达式现在写成需要大写字母。我刚才被告知大写字母是可选的,但不是必需的。如何在不改变任何其他参数的情况下编写这个正则表达式来不至少需要一个大写字母。需要此正则表达式不要求至少有1个大写字母
/^(?:(?!([a-zA-Z0-9-().&@?""#,+''\s\/])\1\1)[a-zA-Z0-9-().&@?""#,+''\s\/]){7,}$/
这正则表达式已经不需要一个大写字符。它所坚持的唯一“有趣”的事情是,字符串不能以重复3次的同一个事物(即相同的字符)开始,而整个字符串至少需要7个字符长。
此外,正则表达式中单引号和双引号字符的倍数是不必要的。
该正则表达式中没有任何内容需要大写字母。该正则表达式的要求是:
-().&@?"#,+'
,空格或/
。如果我没有弄错,这似乎是用于密码验证。由于以下几个原因,这对于正则表达式的使用很差。
这很难读。正确的检查是什么?这一大堆人物实际上做了什么?如果你不是一个正则表达式专家,这是胡言乱语。
它有几个需求塞进一个大的正则表达式。如果检查被分成几行代码会更容易阅读和更易于维护:
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.
它包含一个字符的白名单,而不是黑名单。请勿将字符列入白名单。没有理由阻止用户使用你没有想到的字符。如果他们想使用星号,百分号,重音字母等,该怎么办?你会因为没有良好的安全原因而拒绝这些角色。
**这**是为什么你不写出巨大的不可理解的正则表达式,但只有当他们产生最可读的解决方案时使用它们的小剂量。 – delnan 2011-01-19 21:47:08