正则表达式可选字符

3

我正在使用以下正则表达式:

^([W|w][P|p]|[0-9]){8}$

上述正则表达式还可以接受wp1234567wp+7位数字)。然而期望的是:WP+6位数字,或者wp+6位数字,或者仅有8位数字。
例如:
WP123456
wp126456
64535353
1个回答

4
请注意,[W|w]匹配Ww|,因为字符类内的|失去了其替代运算符的特殊含义。此外,通过在[W|w][P|p]|[0-9]周围设置分组(...),您可以匹配8个*整个序列WP数字的出现。
您应该在有限量词中设置正确的值,并删除分组并使用替代以允许wp+6位数字或仅8位数字:
^(?:[Ww][Pp][0-9]{6}|[0-9]{8})$

请参见演示

正则表达式匹配:

  • ^ - 字符串开头(如果使用String#matches()检查整个字符串,则不需要)
  • (?:[Ww][Pp][0-9]{6}|[0-9]{8}) - 两种选择:
    • [Ww][Pp][0-9]{6} - Ww后跟Pp,然后是6位数字
    • | - 或者……
    • [0-9]{8} - 恰好8位数字
  • $ - 字符串结尾

其他情况(以防万一):

如果您需要匹配由7或8位数字组成的字符串,则需要将{8}有限定符替换为{7,8}

^(?:[Ww][Pp][0-9]{6}|[0-9]{7,8})$

如果您不想匹配 Wp123456wP123456,请在开始时再增加一个可选项:

^(?:(?:WP|wp)[0-9]{6}|[0-9]{8})$

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接