[英]Validate UK postcode using regular expression in oracle
以下是有效邮政编码列表:
A1 1AA
A11 1AA
AA1 1AA
AA11 1AA
A1A 1AA
BFPO 1
BFPO 11
BFPO 111
我试过(([AZ]{1,2}[0-9]{1,2})\\ ([0-9][AZ]{2}))|(GIR\\ 0AA)$
但它不是在职的。 您能否帮助我进行正确的查询以验证所有邮政编码格式。
首先,与其根据手头的数据集进行猜测,不如让我们看看英国的邮政编码是什么。
EC1V 9HQ
前一个或两个字母是邮政编码区域,它标识将处理邮件的主要皇家邮政分拣办公室。 在这种情况下,EC 将前往伦敦的 Mount Pleasant 分拣办公室。
第二部分通常只是一个或两个数字,但对于伦敦的某些地区,它可以是一个数字和一个字母。 这是邮政编码区,它告诉分拣办公室邮件应该去哪个投递办公室。
这第三部分是扇区,通常只是一个数字。 这会告诉投递办公室邮件应该去往哪个地区或社区。
邮政编码的最后一部分是单位代码,它总是两个字母。 这可以识别最多 80 个地址的组,并告诉投递办公室将投递物品的邮政路线(或步行路线)。
消化那个...
\A[[:alpha:]]{1,2}\d[[:alnum:]]? \d[[:alpha:]]{2}\z
我们不能使用\\w
因为它包含一个下划线。
我在^
和$
使用了更精确的\\A
和\\z
,因为\\A
和\\z
匹配字符串的确切开头和结尾,而^
和$
匹配行的开头和结尾。 $
特别是容忍尾随换行符。
当然,也有特殊情况。 XXXX 1ZZ 为各个海外领地,XXXX 一一列举。
\A(ASCN|STHL|TDCU|BBND|BIQQ|FIQQ|PCRN|SIQQ|TKCA) 1ZZ\z
然后是一些非常特殊的情况。
\A(AI-2640|GIR 0AA)\z
把它们放在一起变成一个大(...|...|...)
乱七八糟的东西。 最好将查询分成三部分构建,并将其与x
修饰符放在一起以忽略空格。
REGEXP_LIKE(
postcode,
'\A
(
[[:alpha:]]{1,2}\d[[:alnum:]]?\ \d[[:alpha:]]{2}\z |
(ASCN|STHL|TDCU|BBND|BIQQ|FIQQ|PCRN|SIQQ|TKCA)\ 1ZZ |
(AI-2640|GIR\ 0AA)
)
\z',
'x'
)
或者您可以让基本的正则表达式不那么严格,并在第一部分接受 2-4 个字母数字。 那么只有安圭拉需要担心的特殊情况。
\A([[:alnum:]]{2,4} \d[[:alpha:]]{2}|AI-2640)\z
不利的一面是,这会让不存在的邮政编码进入。 从好的方面来说,您不必为其他特殊情况不断调整。 对于这种级别的过滤,这可能没问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.