[英]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.