【问题标题】:What character should be escaped in Regex应该在正则表达式中转义什么字符
【发布时间】:2016-10-03 14:29:08
【问题描述】:

我一直在尝试使用以下正则表达式。

^(?=.{8,16}$)(([a-zA-Z0-9])\\2?(?!\\2))(?=(.*[a-zA-Z]){1,})(?=(.*[\\d]){1,})|(?=(.*[\\W])(?=(.*[[]{}()<>.,;:\'\")){1,}])(?!.*\\s).{8,16}$

但我收到NSInternalInconsistencyException 错误。

原因:'无法进行正则表达式匹配,原因:无法打开模式 U_REGEX_MISSING_CLOSE_BRACKET(字符串 aa,模式 ^(?=.{8,16}$)(([a-zA-Z0-9]) \2?(?!\2))(?=(.[a-zA-Z]){1,})(?=(.[\d]){1,}) |(?=(.[\W])(?=(.[[]{}().,;:'")){1,}])(?!. *\s).{8,16}$, case 0, canon 0)'

我相信这是因为我没有正确地逃避它。应该转义的字符是什么?

【问题讨论】:

  • 您能告诉我您尝试在模式中编码的条件吗?看起来该模式并没有像你想象的那样做。
  • @WiktorStribiżew:应该包含不带空格的字母、数字和/或特殊字符的组合。没有三个相似字符的连续迭代。密码不应与用户名相同。示例用户名 rajsingh 和密码是 rajsingh。在注册期间它应该给出一个错误。但是用户名 rajsingh 和密码是 RAJSINGH 是一个有效的条目。
  • 我怀疑您是否可以将密码不应与用户名相同要求硬编码到模式中,您必须将其作为变量提供。如果用户名可以包含特殊字符,则必须对其进行转义。好吧,也许"^(?!.*([a-zA-Z0-9])\\1{2})(?=[^a-zA-Z]*[a-zA-Z])(?=\\D*\\d)(?=.*[\\[\\]{}()&lt;&gt;.,;:'\"])\\S{8,16}$" 就足够了。要禁止任何字符串作为变量出现,请在 ^ 之后添加 "(?!" + old_user_name + "$) 前瞻(可能需要转义)。
  • @WiktorStribiżew:如果我放弃其余部分,只关注最多 3 个相似字符,那么正则表达式应该是什么?
  • 我认为"^(?!.*(.)\\1{2})\\S{8,16}$" 很笼统:没有空格,从 8 到 16 个字符,没有三个相同的连续字符。

标签: ios regex swift escaping


【解决方案1】:

您在前瞻组中使用定量{1,},这是不可能的。

【讨论】:

  • 虽然{1,} 没有意义,但我认为这不是主要问题。
  • @WiktorStribiżew:你是对的。即使我删除它,我也会得到同样的错误。
猜你喜欢
  • 2011-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多