2015-06-13 39 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

第一个答案有一个例子,它不会像问题那样表达,编辑以解决这种情况,并且如果您需要不同的正则表达式验证,请检查 –