2014-04-20 52 views
1

我正在爲pl/sql編寫一個函數來驗證郵政編碼。驗證條件是它應該只接受4位數字,並且將null作爲有效代碼。以下是我寫的內容:使用正則表達式驗證郵政編碼

create or replace function is_valid_zip(p_zip_code in varchar2) 
return boolean 
is 
begin 
      if (length(trim(p_zip_code)))<>4 
      then return false; 
      elsif (owa_pattern.match(p_zip_code,'\b\d{4}\b')) 
      then return true; 
      elsif (p_zip_code is null) 
      then return true; 
      else 
      return false; 
      end if; 
end; 

以上代碼接受'!234'作爲有效代碼。我不知道我在哪裏wrong.Can有人指出錯誤代碼

回答

1

使用正則表達式:

^null$|^\d{4}$ 

您正在使用\b標記邊界。由於您的輸入僅爲1234null或類似,您可以簡單地使用開始(^)和結束($)錨點。

正則表達式分解:

  1. ^null$ - null只。

  2. | - 或者。

  3. ^\d{4}$ - 四位數的字符串,如1234

Regex101

+0

但howcome 「!234」 正在使用 「\ B \ d {4} \ b」 的正則表達式匹配?我的意思是d {4}應該匹配字符串右邊的4位數字? –

+0

至少在.net正則表達式工程 - http://refiddle.com/si1 –

+1

感謝您的回覆Gaurang。它的在線鏈接工作正常,但是當我在代碼中替換它時,它顯示「1234」無效。 elsif(owa_pattern.match(p_zip_code,'^ null $ |^\ d {4} $')) 然後返回true; – Esha