美国邮政编码的正则表达式 - 但使其成为可选的

时间:2016-10-14 13:03:02

标签: angularjs regex angular

我需要美国邮政编码的正则表达式。我找到了很多例子,但没有一个允许邮政编码也是可选的。你看,我在非必需的输入字段上使用它,所以有效的场景是5位邮政编码,5 + 4位邮政编码,或根本没有邮政编码。这是我到目前为止所做的,但它不适用于"根本没有邮政编码"场景:

^(\d{5}(?:\-\d{4})?)$

1 个答案:

答案 0 :(得分:5)

您需要使用非捕获可选组将整个模式括起来:

^(?:\d{5}(?:-\d{4})?)?$
 ^^^                ^^

请参阅regex demo

<强>详情:

  • ^ - 字符串开头
  • (?: - 可选组的开始
    • \d{5} - 5位数
    • (?:-\d{4})? - 可选组匹配-和4位
  • )? - 外部可选组的结尾
  • $ - 字符串结束。

请注意,?量词使外部非捕获组可选(匹配1或0次)。

如果你想让你的模式更短,你也可以使用捕获组,但是由于你对捕获的子值不感兴趣,所以在这里使用非捕获组更自然。