正则表达式检查字符串是否至少包含2个数字和1个大写字母

时间:2019-09-19 23:23:38

标签: regex regex-lookarounds regex-group

我需要创建一个正则表达式来检查密码是否至少包含1个大写字母,至少2个数字并以$(美元符号)结尾。

我一直在努力弄清楚,但我只能检查是否至少有1个大写字母和一个数字,而不是两个。

这些应该有效:

4hg5Fjkjk $

fh @#Y5fFF5 $

hgH5Hu6 $


这些无效:

45tyghisu $(无大写字母)

5THygfhy $(只有一个数字)

Gh%hF45 $ h(末尾没有美元符号)


这是我到目前为止的内容(请检查至少一个数字,最后一个大写字母和美元符号)

/(?=.*[A-Z])(?=.*\d).*\$/ 任何帮助将不胜感激!

ps。我看过SO,找不到与一个以上必需字符有关的任何东西。

3 个答案:

答案 0 :(得分:1)

在您的模式中,必须使用(?=(?:[^\d\r\n]*\d){2})contrast来重复声明一次数字,而不是一次。

如果您不想在密码中使用空格,则可以使用\S+来匹配1倍以上的非空格字符。

您可以使用:

^(?=[^A-Z\r\n]*[A-Z])(?=(?:[^\d\r\n]*\d){2})\S+\$$

Regex demo

根据OP给出的答案,字符数应为9-15:

^(?=[^A-Z\r\n]*[A-Z])(?=(?:[^\d\r\n]*\d){2})\S{9,15}\$$

Regex demo

答案 1 :(得分:0)

此RegEx很简单,除了OP所指定的内容外,不对密码中的哪些字符进行其他假设。

^(?=.*?[A-Z])(?=.*?\d.*?\d).*\$$

See Demo(单击“运行测试”)

答案 2 :(得分:0)

感谢所有答案。仔细查看它们,我发现了使用以下正则表达式的一种非常简单的方法。我对其进行了编辑,以允许设置密码的长度,只需将9和15更改为所需的长度即可。

/^(?=.*[A-Z])(?=.*\d.*\d)[^\s]{9,15}\$$/