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

Regex to check if string has at least 2 numbers and 1 capital letter

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

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

这些应该是有效的:

4hg5Fjkjk$

fh@#Y5fFF5$

hgH5Hu6$


这些应该是无效的:

45tyghisu$(无大写)

5THygfhy$(只有一个号码)

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


这是我目前所掌握的(至少检查一个数字、一个大写字母和末尾的美元符号)

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

ps。我查看了 SO,但找不到与超过一个必需字符相关的任何内容。

在您的模式中,您必须重复声明一个数字两次而不是一次,例如使用 (?=(?:[^\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

这个 RegEx 很简单,除了 OP 指定的字符外,没有对密码中可能包含的字符做任何其他假设。

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

See Demo(点击开启"RUN TESTS")

谢谢大家的回答。通过查看它们,我想出了一个非常简单的方法来使用下面的正则表达式。我对其进行了编辑以允许设置密码的长度,只需将 9 和 15 更改为您想要的长度即可。

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