无效转义序列d



我正在尝试检查密码是否包含至少一个小写字母,一个大写字母,一个数字和一个特殊字符。

i'm trying this:

if(!password.matches("(?=.*d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=])")){
        username = "Error";
    }

但是给我一个错误说:无效的转义序列。

谁能帮我解决这个问题,并能确认这是一个正确的模式?

谢谢,怀特\d不做错误,但它不匹配字符串像保罗%88为什么?

Java将字符串中的视为转义序列的开始。请确保您使用\代替(以便您在字符串中获得实际的字符),您应该可以。

快速更新:正如Etienne指出的那样,如果您实际上想要在RegEx本身中使用,则需要使用\\,因为这会在字符串中产生\,这将在RegEx中产生

新问题更新:你提到你的RegEx不工作,我很确定这是因为它是错误的。如果您只想确保每种类型的字符类都有一个存在,那么您可能只想为每个类创建一个RegEx,然后针对每个类检查密码。密码基本上保证是短的(实际上你可以自己控制),所以命中率应该是最小的。

我用这个来快速测试:http://www.regexplanet.com/simple/index.html

如果你在末尾加上。*,

看起来可以工作。我猜你实际上也需要包含一个非前瞻性正则表达式。

这是整个正则表达式:

(?=.*d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^&+=]).*

当然,在java代码中必须转义前面提到的反斜杠

最新更新