如何验证特定条件下必须存在的字符

问题描述 投票:0回答:1

所以我有这个正则表达式:

(([aA-zZ]{2}[0-9]{5})(\w{2})?((XX)|(xx))?(\;)?)*

基本上它验证了这些例子:

zz01104;ZZ02045PA;
zz00110;AH12204
AG01104xx
EV99337xx;

它按预期工作,问题是这样的:

zz00110AH12204;

这两者之间应该有一个;,但我不知道如何用正则表达式直接控制它。

javascript regex
1个回答
1
投票

你应该用

/^[a-zA-Z]{2}[0-9]{5}(?:\w{2})?(?:XX|xx)?(?:;[a-zA-Z]{2}[0-9]{5}(?:\w{2})?(?:XX|xx)?)*;?$/

regex demo

在JS中,您可以动态构建模式以避免两次编写正则表达式部分:

var rxPart = "[a-zA-Z]{2}[0-9]{5}(?:\\w{2})?(?:XX|xx)?";
var rx = new RegExp("^" + rxPart + "(?:;" + rxPart + ")*;?$");
var strs = [ 'zz01104;ZZ02045PA', 'zz00110;AH12204', 'AG01104xx', 'EV99337xx', 'zz00110AH12204'];
for (var s of strs) {
  console.log(s, "=>", rx.test(s));
}

你可以看到模式结构是

  • ^ - 字符串的开头
  • rxPart - 您的单项模式
  • (?: - 非捕获组的开始 ; - 一个分号 rxPart - 您的单项模式
  • )* - 组中任何0次或多次出现的模式序列
  • ;? - 可选的;
  • $ - 字符串的结尾。
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.