我的grails配置中有一个regex:
password.regex = /^(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?!.*0123|.*1234|.*2345|.*3456|.*4567|.*5678|.*6789|.*3210|.*4321|.*5432|.*6543|.*7654|.*8765|.*9876|.*1122|.*2233|.*3344|.*4455|.*5566|.*6677|.*7788|.*8899|.*9900|.*0011|.*1100|.*qwerty)[0-9a-zA-Z]*$/
我限制正则表达式中的qwerty一词。我试图添加一个(?I)使其不区分大小写。*(?I。
我应该把这个不区分大小写的正则表达式放在哪里?我也尝试过转义它(?\\I),但它仍然会导致页面中使用的javascript出错。有人能解释一下原因吗?
您不能在JavaScript中使用内联正则表达式修饰符。此外,并不是每种风格都让我们用(?i:...)
构造使模式的一部分不区分大小写。因此,您所能做的是非常有限的:只需使用字符类来指定每个单词的两个大小写变体:
.*[qQ][wW][eE][rR][tT][yY]
请参阅rexegg.com
Regex Modifiers--打开它们参考:
内联修饰符
(?i)
在.NET、PCRE(C、PHP、R…)、Perl、Python、Java和Ruby(但不包括JavaScript)中,可以使用内联修饰符(?i)
,例如在(?i)cat
中。有关三个附加功能(在Python中不可用)的有趣详细信息,请参阅内联修饰符部分:在字符串中间打开它,用(?-i)
关闭它,或者用(?i:foo)
仅将它应用于非捕获组的内容
现在,使用/i
作为(?i)
的替代方案是使用XRegExp
库:
创建regex时,可以在模式修饰符中包含标志,这些标志也是通过单独的flags参数提供的。例如,
XRegExp('(?s).+', 's')
是完全有效的。
然而,似乎不可能使模式的一部分不区分大小写:
与其他regex风格的兼容性:一些regex风格支持在模式中的任何位置使用多个模式修饰符,并允许通过
(?-i)
取消设置标志、通过(?i-m)
同时设置和取消设置标志以及仅通过(?i:…)
启用子模式的标志的扩展语法XRegExp
不支持这些扩展选项*。