正则表达式匹配字母数字代码

时间:2016-08-24 08:42:48

标签: regex

我想要一个与以下模式匹配的正则表达式

  • 第一个字符字母数字,不包括 I,O,S,Z
  • 第2-3个字符字母数字
  • 第4至第5个角色中只有一个 BB,KA,JQ

目前我已经开发了这种模式

[^I,O,S,Z,i,o,s,z][0-9A-Za-z]{2}[AA|TN|TP]{2}

但它考虑到AI2AT不应该这样做。

2 个答案:

答案 0 :(得分:2)

您可以使用

/^[0-9A-HJ-NP-RT-Y][A-Z0-9]{2}(?:BB|KA|JQ)$/i

/^[0-9A-Ha-hJ-Nj-nP-Rp-rT-Yt-y][A-Z0-9]{2}(?:BB|KA|JQ)$/

请参阅regex demo

如果您可以使用前瞻,则可以使用

/^(?![IOSZiosz])[A-Za-z][A-Za-z0-9]{2}(?:BB|KA|JQ)$/

请参阅this regex demo

您当前的[^I,O,S,Z,i,o,s,z][0-9A-Za-z]{2}[AA|TN|TP]{2}表达式实际上不检查字符串的开头/结尾,[^I,O,S,Z,i,o,s,z]否定的字符类匹配任何字符,但I,,{{1 }等等,O字符类与[AA|TN|TP]{2}A|TN匹配两次。

所以,

  • 您可以使用P
  • 代替第一个否定的字符类
  • 使用带有替换运算符[0-9A-HJ-NP-RT-Y]非捕获组 (?:...)而不是最后一个字符类(在内部被视为文字符号| |个字符类)
  • 不区分大小写的修饰符有助于“缩小”模式,但如果不能使用大写字母,则可以将小写字母加倍;
  • [...] 否定前瞻会限制通用的字母数字(?![IOSZiosz])模式,使其无法与[A-Za-z0-9]I,{{1 }},ioOSs

答案 1 :(得分:0)

试试这个:

(?!I,O,S,Z,i,o,s,z)[0-9A-Za-z][0-9A-Za-z]{2}(BB|KA|JQ){2}