邮政编码的正则表达式
Posted
技术标签:
【中文标题】邮政编码的正则表达式【英文标题】:regex for zip-code 【发布时间】:2010-04-05 06:44:24 【问题描述】:可能重复:What is the ultimate postal code and zip regex?
我需要能够满足我所有三个邮政编码条件的正则表达式。例如-
-
12345
12345-6789
12345 1234
任何指针和建议将不胜感激。谢谢!
【问题讨论】:
重复的关闭看起来很粗略 - 受骗者要求一个正则表达式,该正则表达式将匹配任何国家的任何邮政编码,而这个问题要求一个正则表达式匹配邮政编码,这是一个美国 -唯一的一件事,这使得这个问题的范围比受骗者要窄得多——但实际上是可以在受骗者处找到答案。请参阅***.com/a/7185241/1709587,其中列出了超过 100 个国家/地区(包括美国)的 Unicode CLDR(旧的,现已弃用,但在许多情况下可能仍然足够)邮政编码正则表达式。美国正则表达式是\d5([ \-]\d4)?
。
【参考方案1】:
^\d5(?:[-\s]\d4)?$
^
= 字符串的开头。
\d5
= 匹配 5 位数字(用于条件 1、2、3)
(?:…)
= 分组
[-\s]
= 匹配空格(用于条件 3)或连字符(用于条件 2)
\d4
= 匹配 4 位数字(用于条件 2、3)
…?
= 前面的模式是可选的(对于条件 1)
$
= 字符串结束。
【讨论】:
\s
将匹配任何空格,包括制表符和换行符。
嗨,没有空格的条件 123451234 怎么样
@ProVega:阅读您链接到的(现已删除)答案上的 cmets,这似乎是不正确的。例如,00544
是有效的邮政编码; 544
不是。
@AjaySuwalka:在没有空间的情况下容纳 123451234 所需要做的就是放置一个 ?在 [-\s] 之后,它会变成:^\d5(?:[-\s]?\d4)?$
晚会有点晚了,也许不是舞会上最漂亮的钟声,但我在连字符的两边添加了额外的可选空格——主要是为了美观。 /(^\d5(?:[\s]?[-\s][\s]?\d4)?$)/
【参考方案2】:
仅对于列出的三个条件,这些表达式也可能有效:
^\d5[-\s]?(?:\d4)?$
^\[0-9]5[-\s]?(?:[0-9]4)?$
^\[0-9]5[-\s]?(?:\d4)?$
^\d5[-\s]?(?:[0-9]4)?$
Please see this demo for additional explanation.
如果我们在 5 到 4 位或连续的 9 位邮政编码之间有意外的额外空格,例如:
123451234
12345 1234
12345 1234
例如,此表达式将是具有较少约束的次要选项:
^\d5([-]|\s*)?(\d4)?$
Please see this demo for additional explanation.
正则表达式电路
jex.im 可视化正则表达式:
测试
const regex = /^\d5[-\s]?(?:\d4)?$/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`);
);
【讨论】:
【参考方案3】:我知道这对于大多数经常使用 RegEx 的人来说可能是显而易见的,但如果任何读者不熟悉 RegEx,我想我应该指出我所做的对我的一个项目有帮助的观察。
在@kennytm 的先前回答中:
^\d5(?:[-\s]\d4)?$
……? = 前面的模式是可选的(对于条件 1)
如果您想同时允许标准的 5 位和 +4 邮政编码,这是一个很好的例子。
要按照我的需要仅匹配美国“Zip + 4”格式的邮政编码(仅限条件 2 和 3),只需删除最后一个 ?
,使其始终匹配最后 5 个字符组。
我推荐的用于修改 RegEx 的有用工具链接如下:
https://regexr.com/
当我发现 RegEx 的功能与我需要的类似,但可以更好地定制时,我经常使用此工具。它还有一个漂亮的 RegEx 参考菜单和信息界面,让您了解您的更改如何影响您输入的示例文本的匹配。
如果我有任何错误或遗漏了重要信息,请纠正我。
【讨论】:
或者你可以参考这个正则表达式教程 - youtube.com/watch?v=8uCHRyK_VMo以上是关于邮政编码的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章