转义序列无效\ d
我正在尝试检查密码是否包含至少一个小写字母,一个大写字母,一个数字和一个特殊字符。
我正在尝试这个:
if(!password.matches("(?=.*\d)(?=.*[az])(?=.*[AZ])(?=.*[@#$%^&+=])")){ username = "Error"; }
但是给我一个错误说:无效的转义序列。
有人可以帮我解决问题并确认这是正确的模式吗?
谢谢,惠特\\ d不做错误,但它与像保罗%88这样的字符串不匹配为什么?
Java会将字符串中的\
视为启动转义序列 。 确保你使用\\
代替(以便你在字符串中得到一个真正的\
字符),你应该没问题。
快速更新 :正如Etienne所指出的,如果你真的想在RegEx本身中使用\
,你需要使用\\\\
,因为这会在字符串中产生\\
,这将在RegEx中产生\
。
新问题更新:您提到您的RegEx不起作用,我很确定这是因为它错了。 如果您只想确保每种类型的字符类都存在,您可能只想为每个类创建一个RegEx,然后检查每个类的密码。 密码几乎可以保证很短(你实际上可以自己控制密码),因此性能指数应该是最小的。
我用它来快速测试它: http : //www.regexplanet.com/simple/index.html
如果你把。*放在最后,它看起来很有用。 我想你还需要实际包含一个非前瞻性正则表达式。
这是整个正则表达式:
(?=.*\d)(?=.*[az])(?=.*[AZ])(?=.*[@#$%^&+=]).*
当然,在您的Java代码中,您必须转义已经提到的反斜杠。