我正在尝试使用这个正则表达式
.*[!@#$%^&*()].*[0-9]|[0-9].*[!@#$%^&*()].*
使我的密码至少包含 1 个特殊字符和 1 个数字(确实如此)。但我也试图让它接受像 mike1@
这样的密码。
我该如何修改它,以便它也能采用这样的字母?
最佳答案
最好使用lookaheads
来做到这一点。
^(?=.*[!@#$%^&*()])(?=.*[0-9])(?=.*[a-zA-Z]).*$
您的方法的问题是您必须涵盖所有可能的组合,其中字母在前,或数字在前。使用 lookahead
这是 0 宽度断言
只是一种检查,如果正则表达式甚至没有一个特殊字符
或数字
或字母
,我们可能会失败。
(?=.*[a-zA-Z])
^^ ^^^^^^^
前瞻只是表明,要使该正则表达式通过,某处至少应该有一个字母
。
编辑:
^(?=.*[!@#$%^&*()])(?=.*[0-9]).*$
如果不存在字母约束,请使用此选项。
关于java - 正则表达式不适用于密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33254653/