Answers:
^\d{5}(?:[-\s]\d{4})?$
^
=字符串的开头。\d{5}
=匹配5位数字(用于条件1、2、3)(?:…)
=分组[-\s]
=匹配一个空格(对于条件3)或一个连字符(对于条件2)\d{4}
=匹配4位数字(对于条件2、3)…?
=之前的模式是可选的(对于条件1)$
=字符串的结尾。\s
将匹配任何空格,包括制表符和换行符。
00544
是一个有效的邮政编码;544
不是。
/(^\d{5}(?:[\s]?[-\s][\s]?\d{4})?$)/
仅对于列出的三个条件,这些表达式也可能起作用:
^\d{5}[-\s]?(?:\d{4})?$
^\[0-9]{5}[-\s]?(?:[0-9]{4})?$
^\[0-9]{5}[-\s]?(?:\d{4})?$
^\d{5}[-\s]?(?:[0-9]{4})?$
如果我们在5到4位数字或连续的9位邮政编码之间有意外的额外空格,例如:
123451234
12345 1234
12345 1234
例如,此表达式将是具有较少约束的辅助选项:
^\d{5}([-]|\s*)?(\d{4})?$
jex.im可视化正则表达式:
const regex = /^\d{5}[-\s]?(?:\d{4})?$/gm;
const str = `12345
12345-6789
12345 1234
123451234
12345 1234
12345 1234
1234512341
123451`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
我知道这对于大多数经常使用RegEx的人来说是显而易见的,但是如果有任何读者是RegEx的新手,我想我应该指出一个发现,它对我的一个项目很有帮助。
在@kennytm的先前答案中:
^\d{5}(?:[-\s]\d{4})?$
……?=之前的模式是可选的(对于条件1)
如果要同时允许标准5位数和+4邮政编码,这是一个很好的例子。
要按照我的需要只匹配美国“邮政编码+ 4”格式的邮政编码(仅条件2和3),只需删除最后一个?
,使其始终匹配最后5个字符组即可。
我建议使用RegEx进行修补的有用工具链接如下:
当我发现RegEx的功能与我需要的功能相似但可以进行更好地定制时,我会经常使用此工具。它还具有一个漂亮的RegEx参考菜单和信息界面,使您知道更改如何影响您输入的示例文本的匹配项。
如果我有任何错误或错过重要信息,请纠正我。
\d{5}([ \-]\d{4})?
。