2015-06-13 68 views
0

我想驗證TAX,NAME,TELEPHONE NO。那些應該是字母數字的。所以使用這種方法,但在這裏我想知道我可以用簡單的方法做到這一點,而不使用這麼多的「AND」。Oracle正則表達式REGEXP_LIKE多列

IF REGEXP_LIKE(i.TAX, '^[A-Za-z0-9]+$') AND REGEXP_LIKE(i.NAME, '^[A-Za-z0-9]+$') AND REGEXP_LIKE(VarTelephone , '^[A-Za-z0-9]+$') THEN 

     INSERT INTO BIZZXE_V2_SCH.SUPPLIER_CONTACTS 
     (CONTACT_ID, SUPPLIER_ID, ADDRESS, ZIP_CODE, COUNTRY_ID, CITY_ID, TELEPHONE, FAX, EMAIL, XMLCOL) 
     VALUES(VarContactId ,VarId, k.ADDRESS, k.ZIP_CODE, k.COUNTRY_ID, k.CITY_ID, k.TELEPHONE, k.FAX, k.EMAIL, VarContactDetail); 

    ELSE 
     -- Start Return RVAL Messages -- 
     RVAL.EX_CODE:=1; 
     RVAL.MESSAGE:='Supplier Tax and Supplier Name should be apha-numeric that is numbers letters and symbols..!'; 
     -- End Return RVAL Messages -- 
    END IF; 

回答

2

,因爲它們都需要匹配相同的正則表達式模式,是字母數字,你可以在這3個值的連結驗證:

IF REGEXP_LIKE(i.TAX || i.NAME || VarTelephone , '^[A-Za-z0-9]+$') 

然而,這並不完全表現爲你的問題的條件,因爲如果只有一個或兩個值爲空,則在這種情況下將被評估爲真,而在另一箇中則不是。

一個可能的解決方法是在你需要不同的正則表達式,用於電話驗證,例如只是數字()-+的情況下,會是這樣的:

IF REGEXP_LIKE(i.TAX || ' ' || i.NAME || ' ' || VarTelephone , 
    '^[A-Za-z0-9]+ [A-Za-z0-9]+ [\d()\-+]+$') 

對於這種情況,你必須請確保您選擇的分隔符,在我的情況下,空格將永遠不會出現在任何輸入文本中。

+0

雖然這回答了這個問題,但我認爲這是一個糟糕的做法。 OP應單獨檢查每個值並返回特定於有問題的列的錯誤消息。我也很好奇電話號碼會有字母,但不是'+','(',')'和' - '。 –

+0

第一個答案有一個例子,它不會像問題那樣表達,編輯以解決這種情況,並且如果您需要不同的正則表達式驗證,請檢查 –