我有一个输入文本字段,其中包含这样的商品编号:
ABC_ABC123; AB__B2A4; ABF_323WET; ...
所以我想让用户保留艺术品编号。格式...
这是我的正则表达式,适用于一个艺术编号:
var mask1 = /^([A-Z]{2})([A-Z|_]{1})_([A-Z0-9]{0,16});$/;
但是我想将其扩展为更多的字符串/艺术编号
我该如何解决?
谢谢!
答案 0 :(得分:2)
在单项模式中,小写字母匹配存在问题,必须将它们添加到字符类[A-Z0-9]{0,16}
=> [A-Za-z0-9]{0,16}
中。
整体解决方案如下
/^[A-Z]{2}[A-Z_]_[A-Za-z0-9]{0,16};(?: [A-Z]{2}[A-Z_]_[A-Za-z0-9]{0,16};)*$/
请参见regex demo
详细信息
^
-字符串的开头[A-Z]{2}[A-Z_]_[A-Za-z0-9]{0,16};
-您的项目模式:
[A-Z]{2}
-两个大写ASCII字母[A-Z_]
-大写ASCII字母或_
_
-一个_
字符[A-Za-z0-9]{0,16}
-0到16个字母数字ASCII字符;
-分号(?: [A-Z]{2}[A-Z_]_[A-Za-z0-9]{0,16};)*
-0次或多次出现
-空格(用\s
替换以匹配任何空白,构造函数符号中的\\s
)[A-Z]{2}[A-Z_]_[A-Za-z0-9]{0,16};
-项目模式$
-字符串的结尾。在JS中,您可以动态构建模式以使其可读:
var block = "[A-Z]{2}[A-Z_]_[A-Za-z0-9]{0,16};"
var regex = new RegExp(`^${block}(?: ${block})*$`)
console.log( regex.test("ABC_abc123; AB__B2A4; ABF_323WET;") )