邮政编码的正则表达式


118

可能重复:
最终的邮政编码和正则表达式是什么?

我需要可以满足我所有三个邮政编码条件的Regex。例如-

  1. 12345
  2. 12345-6789
  3. 12345 1234

任何指示和建议将不胜感激。谢谢 !


4
重复的封口看起来很粗略-欺骗者要求的正则表达式要与任何国家/地区的邮政编码匹配,而这个问题却要求正则表达式与邮政编码匹配,这是美国唯一的事情,这使得此问题变得非常多。范围比欺骗更窄-但是实际上在欺骗中找到答案。请参阅stackoverflow.com/a/7185241/1709587,其中列出了包括美国在内的100多个国家/地区的Unicode CLDR(旧版本,现已弃用,但在许多情况下可能仍然足够)。美国正则表达式是\d{5}([ \-]\d{4})?
Mark Amery

Answers:


310
^\d{5}(?:[-\s]\d{4})?$
  • ^ =字符串的开头。
  • \d{5} =匹配5位数字(用于条件1、2、3)
  • (?:…) =分组
  • [-\s] =匹配一个空格(对于条件3)或一个连字符(对于条件2)
  • \d{4} =匹配4位数字(对于条件2、3)
  • …? =之前的模式是可选的(对于条件1)
  • $ =字符串的结尾。

7
\s将匹配任何空格,包括制表符和换行符。
眼睑失明

1
喜怎么样的条件123451234没有空间
阿贾伊Suwalka

4
@ProVega:阅读关于您链接到的(现已删除)答案的评论,这似乎是不正确的。例如,00544是一个有效的邮政编码;544不是。
Keith Thompson

2
@AjaySuwalka:要容纳123451234而没有空间,您所要做的就是放一个?[-\ s]之后,因此它将变为:^ \ d {5}(?:[-\ s]?\ d {4})?$
Grungondola 2015年

6
派对晚了一点,也许不是最漂亮的钟声,但是我在连字符的两边都添加了额外的可选空间-主要是为了美观。/(^\d{5}(?:[\s]?[-\s][\s]?\d{4})?$)/
Birrel '16

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}`);
    });
}


0

我知道这对于大多数经常使用RegEx的人来说是显而易见的,但是如果有任何读者是RegEx的新手,我想我应该指出一个发现,它对我的​​一个项目很有帮助。

在@kennytm的先前答案中:

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

……?=之前的模式是可选的(对于条件1)

如果要同时允许标准5位数和+4邮政编码,这是一个很好的例子。

要按照我的需要只匹配美国“邮政编码+ 4”格式的邮政编码(仅条件2和3),只需删除最后一个?,使其始终匹配最后5个字符组即可。

我建议使用RegEx进行修补的有用工具链接如下:

https://regexr.com/

当我发现RegEx的功能与我需要的功能相似但可以进行更好地定制时,我会经常使用此工具。它还具有一个漂亮的RegEx参考菜单和信息界面,使您知道更改如何影响您输入的示例文本的匹配项。

如果我有任何错误或错过重要信息,请纠正我。


或者您也可以参考这个表达式教程- youtube.com/watch?v=8uCHRyK_VMo
Krishnraj拉纳
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.