我有正则表达式^\d{5}$|^\d{5}-\d{4}*$"
,它检查了美国 zip。但我需要检查“ zip, zip, zip
”如何做到这一点?
我试过了,^(\d{5}$|^\d{5}-\d{4},)*$
但它不起作用
尝试
((^|, )(\d{5}|\d{5}-\d{4}))*$
每个匹配项必须以(^|, )
开头,因此以字符串开头或,
(逗号空格)开头
请注意,您不应该\d
在 .NET 中使用,٠١٢٣٤
因为\d
! (在 .NET 中\d
包括非 ASCII Unicode 数字)。[0-9]
通常更好。
您似乎需要的表达式是:
^\d{5}(|-\d{4})(,\d{5}(|-\d{4}))*$
你试图写的是:
^(\d{5}|\d{5}-\d{4},)*$
但这将要求每个 ZIP 都有一个尾随逗号,而最后一个则没有。
分解给出的答案,
\d{5}(|-\d{4})
是您原来的变体,但只是将 -1234 设为可选。(,\d{5}(|-\d{4}))*
是第一个以逗号开头的正则表达式,允许出现零次或多次。我会用它来提高速度:
^\d{5}(?:-\d{4})?(?:,\s*\d{5}(?:-\d{4})?)*$
展开
^
\d{5}
(?: - \d{4} )?
(?:
, \s* \d{5}
(?: - \d{4} )?
)*
$
这是为了速度/灵活性:
^\s*\d{5}(?:\s*-\s*\d{4})?(?:\s*,\s*\d{5}(?:\s*-\s*\d{4})?)*\s*$
展开
^
\s*
\d{5}
(?: \s* - \s* \d{4} )?
(?:
\s* , \s* \d{5}
(?: \s* - \s* \d{4} )?
)*
\s*
$