将几个特殊字符添加到现有的正则表达式中

3
我在我的应用程序的修改密码功能中使用了一个正则表达式模式。密码要求如下:
  • 至少包含一个小写字母
  • 至少包含一个大写字母
  • 至少8个字符
  • 至少包含一个数字
  • 至少包含一个特殊字符
我想把这些字符添加到我的模式中,但是我无法添加斜杆和单引号。我该如何转义它们?我正在使用Eclipse(Java),所以需要使用2个反斜杠进行转义。
现在,我的模式看起来像这样,并且出现了错误:
String customPattern = "((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])
(?=.*[!@#$%^&*()\\-_+=/?.,>~\\\\|\\[];:\\"'{}])(?=[\\S]+$).{8,})";

1
请查看以下网址:http://www.regular-expressions.info/characters.html 和 http://www.regular-expressions.info/nonprint.html - Dlanod Kcud
2个回答

2

在双引号前加一个反斜杠,并转义字符类中出现的]

String customPattern = "^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*()\\-_+=/?.,>~\\\\|\\[\\];:\"'{}])(?=\\S+$).{8,}";

您好,我会尝试的,谢谢。四个反斜杠是在模式中包含“\”的正确方式吗? - Dands Manuel
是的,使用四个斜杠来匹配一个字面上的反斜杠字符。 - Avinash Raj
谢谢您先生!我认为它解决了我的问题。我会测试一下这个模式。 - Dands Manuel

1
你没有在字符类[!@#$%^&*()\\-_+=/?.,>~\\\\|\\[];:\\"'{}]中转义](紧接着\\[)。这里是一个有效的正则表达式(使用^/$锚点,如果不与matches()一起使用,则确实会强制检查整个字符串的长度):
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*()\-_+=\/?.,>~\\|\[\];:"'{}])(?=\S+$).{8,}$
                                                                ^^

查看 演示

在Java中,您可以将其用作

String customPattern = "^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*()\\-_+=/?.,>~\\\\|\\[\\];:\"'{}])(?=\\S+$).{8,}$";

谢谢,这真的很有帮助! - Dands Manuel
如果是这样,请考虑给我的答案点赞。实际上,我是第一个让您知道在字符类中转义]的人,Avinash在看到我的回答后很快就编辑了他的回答 :) - Wiktor Stribiżew
@stribizhev 完全错误。我只是在你的答案后添加了文字,但请查看我的原始正则表达式,字符类中的]被转义了。我认为你无法看到那个.. - Avinash Raj
@AvinashRaj:嗯,说得对,Avinash,当你第一次发布正则表达式时,我确实没有检查它本身。抱歉。 - Wiktor Stribiżew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接