【发布时间】: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)(?=.*[\\[\\]{}()<>.,;:'\"])\\S{8,16}$"就足够了。要禁止任何字符串作为变量出现,请在^之后添加"(?!" + old_user_name + "$)前瞻(可能需要转义)。 -
@WiktorStribiżew:如果我放弃其余部分,只关注最多 3 个相似字符,那么正则表达式应该是什么?
-
我认为
"^(?!.*(.)\\1{2})\\S{8,16}$"很笼统:没有空格,从 8 到 16 个字符,没有三个相同的连续字符。