为组规则
问题描述:
Regex的密码验证我有密码验证的规则如下:为组规则
- 至少8个字符
- 至少1个大写字母
- 至少3小写字母
- 至少1号
- 至少1个特殊字符
- 起始字符必须是字母(大写或小写)
- 行中最多2个相同的字符 (例如Passs123!应该是无效的,但sPass123!有效)
我试图找到正则表达式这个规则,最接近的是这样的:
/^(?=.*[0-9]) (?=.*[[email protected]#$%^&*]) (?=.*[a-z]) (?=.*[A-Z]) {8} $/
,但它并不适用于所有的规则工作。
我是新来的正则表达式,我也很欣赏任何资源,我可以学习正则表达式。
答
您可以考虑以下几种模式:
^(?=.*[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个特殊字符(不发一言,也没有空格字符)(注:如果你只是想从列表中请求特殊字符,使用原始模式中的(?=.*[[email protected]#$%^&*])
) -
(?=(?:[^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])
。
条件'3小写字母'不起作用。 'PASS123! '匹配正则表达式。 – ikleschenkov
@ikleschenkov它的工作原理,仅在因为'[^ a-z]'构造也符合换行符而在演示中不起作用。这里是一个更合适的链接 - https://regex101.com/r/g4gptV/2,其中'[^ a-z]'变成'[^ \ na-z]'只是因为演示包含单个多元化字符串。在真实情况下,这些行是独立的字符串。 –
@WiktorStribiżew我从你的解决方案中学到了很多东西。 +1总是很好地解释它:-) – Gurman