所以我有这个正则表达式:
(([aA-zZ]{2}[0-9]{5})(\w{2})?((XX)|(xx))?(\;)?)*
基本上它验证了这些例子:
zz01104;ZZ02045PA;
zz00110;AH12204
AG01104xx
EV99337xx;
它按预期工作,问题是这个:
zz00110AH12204;
这两者之间应该有一个;
,但我不知道如何直接使用正则表达式来控制它。
最佳答案
你应该使用
/^[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 次或多次;?
- 可选的;
$
- 字符串结尾。
关于javascript - 如何验证在特定条件下必须存在的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49028996/