针对特定范围的加拿大和美国邮政编码的Oracle正则表达式

时间:2017-09-21 23:00:48

标签: regex oracle

我需要为加拿大和美国的邮政编码创建一个正则表达式,但邮政编码必须从10000开始并转到99999,我已经尝试了各种配置,但它不会为拉链工作代码从10000开始,不确定我做错了什么。任何帮助将不胜感激。

' ^ [AZ] [0-9] [AZ] - [0-9] [AZ] [0-9] $ |(^ [1-9] {5}([O-? 9] {4})$)&#39?;

2 个答案:

答案 0 :(得分:2)

你写了

[1-9]{5}(?[0-9]{4})?

问号对你没有帮助。

波士顿以及许多其他地方都有从零开始的格式良好的ZIP。但假设你真的想要排除它们,那么只需坚持正确的初始数字,然后再加上四个不受限制的数字:

[1-9][0-9]{4}

(请注意,ZIP + 4似乎超出了问题陈述的范围。)

答案 1 :(得分:2)

您有[1-9]{5},只接受以五个非零数字字符开头的邮政编码。 10000有零,因此与模式不匹配。根据您对前导非零数字的要求,您想要的是为单个字符匹配[1-9],然后为接下来的4个字符匹配[0-9](或\d):

US

^[1-9]\d{4}([ -]?\d{4})?$

Canadian

^[ABCEGHJKLMNPRSTVXY][0-9][ABCEGHJKLMNPRSTVWXYZ][ -]?[0-9][ABCEGHJKLMNPRSTVWXYZ][0-9]$

两者在一起:

^[ABCEGHJKLMNPRSTVXY][0-9][ABCEGHJKLMNPRSTVWXYZ][ -]?[0-9][ABCEGHJKLMNPRSTVWXYZ][0-9]$|^[1-9]\d{4}([ -]\d{4})?$