我一直在制作符合以下要求的正则表达式。
// Must be exactly 17 characters
// Must only contain letters and numbers
// Cannot contain the letters ‘I’, ‘O’ or ‘Q’
// Must contain at least 1 alpha and 1 numeric character.
感谢另一个主题的一些帮助,我设法得到了
的正则表达式 /^(?=.*[0-9])(?=.*[a-zA-Z])([a-hj-npr-z0-9]{17})$/
我能够按照https://regex101.com/r/cVz4b9/4/验证这一点。
出于某些原因,当我在Groovy中尝试这个时,虽然我没有得到相同的结果。
def regex = /^(?=.*[0-9])(?=.*[a-zA-Z])([a-hj-npr-z0-9]{17})$/
println ('B1cCdDeEfFgGhHwww' ==~ regex)
例如,当我期望为真时,下面的Groovy脚本会输出false。也许我没有逃避我应该做的事情?我使用的是斜线字符串,所以我不确定为什么这不起作用?
如果有人能够找出对我有帮助的错误。
感谢
答案 0 :(得分:2)
由于\w
与[a-zA-Z_0-9]
匹配,您可以采用以下有序(和简明)方法:
(?i)
。既然没有被撤销,
它“正常”直到正则表达式结束。(?=.*[\d])(?=.*[a-z])
。\w
匹配(见下文):(?!.*[ioq_])
。[\w]{17}
(而不是
分别提到字母和数字,记住“_”是
禁止早些时候)。 ^
和$
不需要,因为==~
会检查整个文字
与正则表达式相匹配。
总结正则表达式可以是:(?i)(?=.*[\d])(?=.*[a-z])(?!.*[ioq_])[\w]{17}
。
答案 1 :(得分:1)
看起来这个案例并不重要,所以你可以添加不区分大小写的标志(?i)
def regex = /^(?=.*[0-9])(?=.*[a-zA-Z])((?i)[a-hj-npr-z0-9]{17})$/