我需要正则表达式,它可以满足我对邮政编码的所有三个条件。 E.g-
任何指针和建议都会非常感激。谢谢!
答案 0 :(得分:296)
^\d{5}(?:[-\s]\d{4})?$
^
=字符串的开头。\d{5}
=匹配5位数(条件1,2,3)(?:…)
=分组[-\s]
=匹配空格(条件3)或连字符(条件2)\d{4}
=匹配4位数(条件2,3)…?
=之前的模式是可选的(条件1)$
=字符串结束。答案 1 :(得分:0)
仅对于列出的三个条件,这些表达式也可能起作用:
^\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}`);
});
}
答案 2 :(得分:0)
我知道这对于大多数经常使用RegEx的人来说是显而易见的,但是如果有任何读者不熟悉RegEx,我想我应该指出一个发现,它对我的一个项目很有帮助。
在@kennytm的先前答案中:
^\d{5}(?:[-\s]\d{4})?$
...? =之前的模式是可选的(对于条件1)
如果您要同时允许使用标准的5位数和+4邮政编码,则是一个很好的例子。
要按我的需要只匹配美国“邮政编码+ 4”格式的邮政编码(仅条件2和3),只需删除最后一个?
,使其始终匹配最后5个字符组。
我建议使用RegEx修补的有用工具链接如下:
当我发现RegEx的功能与我需要的功能相似但可以进行更好地定制时,我会经常使用此工具。它还具有一个精美的RegEx参考菜单和信息界面,使您知道更改如何影响您输入的示例文本的匹配项。
如果我有任何错误或错过重要信息,请纠正我。
答案 3 :(得分:0)
您“使用Google吗?” commonly used regular expressions
...在Perl世界中,Regexp::Common
...依此类推。