1

我有正则表达式^\d{5}$|^\d{5}-\d{4}*$",它检查了美国 zip。但我需要检查“ zip, zip, zip”如何做到这一点?

我试过了,^(\d{5}$|^\d{5}-\d{4},)*$但它不起作用

4

3 回答 3

4

尝试

((^|, )(\d{5}|\d{5}-\d{4}))*$

测试者:http ://regexr.com?36297

每个匹配项必须以(^|, )开头,因此以字符串开头或,(逗号空格)开头

请注意,您不应该\d在 .NET 中使用,٠١٢٣٤因为\d! (在 .NET 中\d包括非 ASCII Unicode 数字)。[0-9]通常更好。

于 2013-08-22T10:32:52.203 回答
0

您似乎需要的表达式是:

    ^\d{5}(|-\d{4})(,\d{5}(|-\d{4}))*$

你试图写的是:

    ^(\d{5}|\d{5}-\d{4},)*$

但这将要求每个 ZIP 都有一个尾随逗号,而最后一个则没有。

分解给出的答案,

  • \d{5}(|-\d{4})是您原来的变体,但只是将 -1234 设为可选。
  • (,\d{5}(|-\d{4}))*是第一个以逗号开头的正则表达式,允许出现零次或多次。
于 2013-08-22T10:29:49.927 回答
0

我会用它来提高速度:

 ^\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* 
 $
于 2013-08-22T19:46:48.457 回答