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

时间:2015-06-30 08:57:41

标签: java regex validation

我在我的应用的更改密码功能中使用正则表达式模式。密码的要求是:

  • 至少1封小写字母
  • 至少1个大写字母
  • 至少8个字符
  • 至少1个号码
  • 至少1个特殊字符

我想在我的模式中添加这些字符,但我似乎无法添加" \"以及单引号和双引号。我怎么逃避他们?我使用Eclipse(Java),因此转义需要2个反斜杠

现在,我的模式看起来像这样,它给了我一个错误:

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

2 个答案:

答案 0 :(得分:2)

在双引号前放一个反斜杠,并在char类中转义]

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

答案 1 :(得分:1)

您没有逃脱角色类]内的[!@#$%^&*()\\-_+=/?.,>~\\\\|\\[];:\\"'{}]\\[之后)。这是一个正常工作的正则表达式(使用^ / $锚点,如果不与matches()一起使用,它将真正强制执行整个字符串的长度检查:

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

请参阅demo

在Java中,您可以将其用作

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