我需要美国邮政编码的正则表达式。我找到了很多例子,但没有一个允许邮政编码也是可选的。你看,我在非必需的输入字段上使用它,所以有效的场景是5位邮政编码,5 + 4位邮政编码,或根本没有邮政编码。这是我到目前为止所做的,但它不适用于"根本没有邮政编码"场景:
^(\d{5}(?:\-\d{4})?)$
答案 0 :(得分:5)
您需要使用非捕获可选组将整个模式括起来:
^(?:\d{5}(?:-\d{4})?)?$
^^^ ^^
请参阅regex demo
<强>详情:
^
- 字符串开头(?:
- 可选组的开始
\d{5}
- 5位数(?:-\d{4})?
- 可选组匹配-
和4位)?
- 外部可选组的结尾$
- 字符串结束。请注意,?
量词使外部非捕获组可选(匹配1或0次)。
如果你想让你的模式更短,你也可以使用捕获组,但是由于你对捕获的子值不感兴趣,所以在这里使用非捕获组更自然。