【问题标题】:Adding several special characters to existing regex向现有的正则表达式添加几个特殊字符
【发布时间】:2015-09-16 23:40:18
【问题描述】:

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

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

我想将这些字符添加到我的模式中,但我似乎无法添加“\”以及单引号和双引号。我该如何逃脱它们?我正在使用 Eclipse (Java),所以转义需要 2 个反斜杠

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

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

【问题讨论】:

标签: java regex validation


【解决方案1】:

在双引号前加一个反斜杠,同时转义 char 类中的 ]

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

【讨论】:

  • 您好,先生,我会试试的,谢谢。四个反斜杠是在我的模式中包含“\”的正确方法吗?
  • 是的,使用四个斜杠来匹配文字反斜杠字符。
  • 谢谢先生!我认为它解决了我的问题。我会测试模式
【解决方案2】:

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

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

demo

在Java中,你可以把它当作

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

【讨论】:

  • 谢谢,这真的很有帮助!
  • 如果是,请考虑支持我的回答。实际上,我是第一个让你知道在角色类中 escaoing ] 的人,Avinash 看到我的答案后迅速编辑了他的答案:)
  • @stribizhev 完全错误。我只是在你回答后添加了措辞,但看看我原来的正则表达式,char 类中的] 被转义了。我认为您无法查看..
  • @AvinashRaj:嗯,没错,Avinash,当你第一次发布正则表达式时,我没有检查它本身。对不起。
猜你喜欢
  • 2013-12-19
  • 1970-01-01
  • 2022-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-20
相关资源
最近更新 更多