多个逗号分隔的两种模式的正则表达式验证不起作用
Regex validation of two patterns multiple comma-separated doesn't work
在 ASP.NET 表单中,我试图找到一个允许多个逗号分隔元素的模式,但它似乎不起作用。我需要允许 4 个字母和 2 个数字 (JEAN01) 或 2 个数字和 4 个字母 (01JEAN) 任意次数:JEAN01,JEAN02,03JEAN,JEAN04
我的第一次尝试(参见 https://regex101.com/r/E4JZVv/1)是:
/^([a-z-A-Z]{4}[0-9]{2}|[a-z-A-Z]{2}[0-9]{4})(,[a-z-A-Z]{4}[0-9]{2}|[a-z-A-Z]{2}[0-9]{4})*$
我的第二次尝试(https://regex101.com/r/HU9cOS/1)是
((^|[,])[a-z-A-Z]{4}[0-9]{2}|[a-z-A-Z]{2}[0-9]{4})+
第一个只接受几个元素。
这应该可以解决问题:
^((\w{4}\d{2}|\d{2}\w{4})(,|$))+
参见:https://regex101.com/r/8hoNXl/1
解释:
^
:声明字符串开头的位置
\w{4}\d{2}
: 4个字母和2个数字
\d{2}\w{4}
: 2位数字和4个字母
(,|$)
:,
或字符串结尾
+
:重复一次到无限次(贪心)
您第一次尝试的设置很好,只有:
- 你要匹配与这部分不同的
4 letters and 2 digits or 2 digits and 4 letters
[a-z-A-Z]{2}[0-9]{4}
- 在第二部分的组重复中,你必须重复逗号并将后面的交替本身也放在一个组中,这样逗号就可以在两个交替前加上
使用不区分大小写的匹配:
(?i)^(?:[a-z]{4}[0-9]{2}|[0-9]{2}[a-z]{4})(?:,(?:[a-z]{4}[0-9]{2}|[0-9]{2}[a-z]{4}))*$
看到一个regex demo。
对于您尝试的第二个模式,字符串开头的断言不应交替出现,否则您可以进行部分匹配,因为它也允许使用逗号。
您可以在末尾使用逗号重复交替。如果您不想让字符串以逗号开头,您可以使用否定先行 (?!,)
并在断言字符串开头后使用交替。
(?i)^(?!,)((?:,|^)(?:[a-z]{4}[0-9]{2}|[0-9]{2}[a-z]{4}))+$
再看一个regex demo。
在 ASP.NET 表单中,我试图找到一个允许多个逗号分隔元素的模式,但它似乎不起作用。我需要允许 4 个字母和 2 个数字 (JEAN01) 或 2 个数字和 4 个字母 (01JEAN) 任意次数:JEAN01,JEAN02,03JEAN,JEAN04
我的第一次尝试(参见 https://regex101.com/r/E4JZVv/1)是:
/^([a-z-A-Z]{4}[0-9]{2}|[a-z-A-Z]{2}[0-9]{4})(,[a-z-A-Z]{4}[0-9]{2}|[a-z-A-Z]{2}[0-9]{4})*$
我的第二次尝试(https://regex101.com/r/HU9cOS/1)是
((^|[,])[a-z-A-Z]{4}[0-9]{2}|[a-z-A-Z]{2}[0-9]{4})+
第一个只接受几个元素。
这应该可以解决问题:
^((\w{4}\d{2}|\d{2}\w{4})(,|$))+
参见:https://regex101.com/r/8hoNXl/1
解释:
^
:声明字符串开头的位置\w{4}\d{2}
: 4个字母和2个数字\d{2}\w{4}
: 2位数字和4个字母(,|$)
:,
或字符串结尾+
:重复一次到无限次(贪心)
您第一次尝试的设置很好,只有:
- 你要匹配与这部分不同的
4 letters and 2 digits or 2 digits and 4 letters
[a-z-A-Z]{2}[0-9]{4}
- 在第二部分的组重复中,你必须重复逗号并将后面的交替本身也放在一个组中,这样逗号就可以在两个交替前加上
使用不区分大小写的匹配:
(?i)^(?:[a-z]{4}[0-9]{2}|[0-9]{2}[a-z]{4})(?:,(?:[a-z]{4}[0-9]{2}|[0-9]{2}[a-z]{4}))*$
看到一个regex demo。
对于您尝试的第二个模式,字符串开头的断言不应交替出现,否则您可以进行部分匹配,因为它也允许使用逗号。
您可以在末尾使用逗号重复交替。如果您不想让字符串以逗号开头,您可以使用否定先行 (?!,)
并在断言字符串开头后使用交替。
(?i)^(?!,)((?:,|^)(?:[a-z]{4}[0-9]{2}|[0-9]{2}[a-z]{4}))+$
再看一个regex demo。