规则集

时间:2017-09-01 10:55:37

标签: regex validation passwords

我有以下密码验证规则:

  • 至少8个字符
  • 至少1个大写字母
  • 至少3个小写字母
  • 至少1个号码
  • 至少1个特殊字符
  • 起始字符必须是字母(大写或小写)
  • 行中最多2个相同的字符 (例如Passs123!应该无效,但sPass123!有效)

我试图找到这个规则的正则表达式模式,最接近的是:

/^(?=.*[0-9]) (?=.*[!@#$%^&*]) (?=.*[a-z]) (?=.*[A-Z]) {8} $/

但它并不适用于所有规则。

我是正则表达式的新手,我也很欣赏任何可以学习正则表达式的资源。

1 个答案:

答案 0 :(得分:3)

您可以考虑以下模式:

^(?=.*[0-9])(?=.*[^\w\s])(?=(?:[^a-z]*[a-z]){3})(?=.*[A-Z])(?!.*(.)\1{2})[a-zA-Z].{7,}$

请参阅regex demo(请注意\n仅添加到[^a-z]中,仅用于测试演示目的,以免在单个多行输入中的换行符溢出。)

<强>详情

  • ^ - 字符串开头
  • (?=.*[0-9]) - 1位
  • (?=.*[^\w\s]) - 任何1个特殊字符(不是单词,也不是空白字符)(注意:如果您只想要从列表中选择特殊字符,请使用原始模式中的(?=.*[!@#$%^&*]))< / LI>
  • (?=(?:[^a-z]*[a-z]){3}) - 3个小写字母
  • (?=.*[A-Z]) - 1个大写字母
  • (?!.*(.)\1{2}) - 没有相同的3个连续字符
  • [a-zA-Z] - 第一个字母是一封信
  • .{7,} - 然后是7个字符
  • $ - 字符串结尾

要详细了解密码验证,请参阅Lookahead Example: Simple Password Validation

请注意,您可以使用principle of contrast来增强前瞻检查:将(?=.*[0-9])替换为(?=[^0-9]*[0-9]),将(?=.*[A-Z])替换为(?=[^A-Z]*[A-Z])(?=.*[^\w\s])(?=[\w\s]*[^\w\s])