我想要的正则表达式可以满足以下要求:
- 6 ~ 10个字符之间
- 至少有1个但不超过2个字符需要是alpha
- alpha字符可以在字符串 中的任何位置。
我们已经尝试过了,但没有像预期的那样工作:(^[A-Z]{1,2}[0-9]{5,8}$)|(^[A-Z]{1}[0-9]{4,8}[A-Z]{1}$)|(^[0-9]{4,8}[A-Z]{1,2}$)|([^A-Z]{3}[0-9]{6,9})
有谁能帮我弄明白吗?
感谢您可以断言字符串的长度为6-10个字符。
然后在可选数字之间匹配至少一个字符[A-Z]
,并在可选数字之间匹配第二个字符[A-Z]
。
^(?=[A-Zd]{6,10}$)d*[A-Z](?:d*[A-Z])?d*$
^
起始字符串(?=[A-Zd]{6,10}$)
正向前看断言6-10次a - z或数字d*[A-Z]
先匹配可选数字,再匹配第一个[A-Z]
(?:d*[A-Z])?
可选匹配可选数字和第二个[A-Z]
d*
匹配可选数字$
字符串结束
查看正则表达式演示。
一种选择是使用以下正则表达式:
^(?=.*[a-z])(?!(?:.*[a-z]){3})[a-zd]{6,10}$
设置与大小写无关的标志i
。
演示该表达式为"匹配字符串的开头,断言字符串至少包含一个字母,断言字符串不包含三个字母,并断言字符串包含6-10个字符,且均为字母或数字"。
表达式的各个部分具有以下功能:
^ # match the beginning of the string
(?= # begin a positive lookahead
.*[a-z] # match zero or more characters and then a letter
) # end positive lookahead
(?! # begin a negative lookahead
(?: # begin a non-capture group
.*[a-z] # match zero or more characters and then a letter
){3} # end non-capture group and execute it 3 times
) # end negative lookahead
[a-zd]{6,10} # match 6-10 letters or digits
$ # match end of string
请注意,这两种预查操作都没有将正则表达式引擎维护的字符串指针从字符串的开头向前推进。