正则表达式不适用于密码

时间:2015-10-21 08:41:33

标签: java regex

我正在尝试使用此正则表达式

.*[!@#$%^&*()].*[0-9]|[0-9].*[!@#$%^&*()].*

使我的密码至少有1个特殊字符和1个数字(它确实如此)。但我也试图让它像mike1@这样的密码。

如何修改它以便它也需要这样的字母?

1 个答案:

答案 0 :(得分:4)

最好使用lookaheads执行此操作。

^(?=.*[!@#$%^&*()])(?=.*[0-9])(?=.*[a-zA-Z]).*$

您的方法存在的问题是,您必须涵盖所有可能的组合,其中首先是一封信,或者首先是一个数字。使用lookahead 0 width assertions只是一种检查,如果它没有一个special characternumberletter,我们就会失败正则表达式。

(?=.*[a-zA-Z])

 ^^   ^^^^^^^

前瞻简单地指出,为了通过这个正则表达式,应该至少有一个letter

编辑:

^(?=.*[!@#$%^&*()])(?=.*[0-9]).*$

如果不存在字母约束,请使用此选项。