首页 > 解决方案 > Angular 4 的密码正则表达式失败

问题描述

我添加了一个正则表达式,它将检查至少 8 个字符、至少一个数字、一个大写字母、一个小写字母和一个特殊字符 这是使用的正则表达式

'(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[$@$!%*?&])[A-Za-zd$@$!%*?&].{8,}'

上面的正则表达式在大多数情况下都可以正常工作,但是当我使用

1oB!gb0s5

或者

Pass@123

它失败。谁能告诉我这里的问题。

标签: javascriptangular

解决方案


这是您的正则表达式中实际使用输入的部分:

[A-Za-zd$@$!%*?&].{8,}

这意味着密码必须以上述字符类中的字符之一开头。这也意味着一个有效的密码必须有9 个或更多字符,因为该类计为 1,并且{8,}意味着 8 个或更多。因此,以下内容将失败,因为它不以任何此类字符开头:

1oB!gb0s5

您给出的第二个示例由于不同的原因而失败,因为它只有 8 个字符:

Pass@123

我不知道你在这里想要什么逻辑。如果您只想确保密码具有小写、大写、数字和特殊字符,那么也许您可以删除前导字符类并坚持使用前瞻:

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

这是一个演示,它显示您的两个示例密码将使用上述模式传递。

演示


推荐阅读