2010-10-22 85 views
2

我想寫一個PLSQL函數,如果我傳遞的域名有效,返回true。如何使用Oracle regexp編寫函數來測試domaine名稱?

我應該使用正則表達式,但我不知道如何做到這一點。

declare 
    ignore boolean; 
begin 
    isDomainSyntaxOk('www.laclasse.com'); --> should return true. 
    isDomainSyntaxOk('www.la classe.com'); --> should return false because of the space char. 
end; 

任何想法?

+0

您需要定義什麼是有效的和什麼是無效的。構建正則表達式將建立在此之上。然後,使用'REGEXP_LIKE'函數在PL/SQL中進行檢查。 – 2010-10-22 15:39:42

+0

什麼版本的Oracle? Oracle的正則表達式支持直到10g纔開始。那麼子域呢?IE的stackoverflow.com與blog.stackoverflow.com? – 2010-10-22 15:44:28

回答

0

我終於修改了功能,以應對 '..' occurence問題:

function isSyntaxeDomaineOk(pStr varchar2, pChar4Space varchar2 default null) return boolean is 
begin 
    return regexp_like(pStr, '^[a-z0-9][-a-z.0-9]*[a-z0-9]$') 
           and not regexp_like(pStr, '\.\.'); 
end isSyntaxeDomaineOk; 

HTH。

0

我正則表達式能力弱,所以我希望有人走來,並修復了這個:

create or replace 
FUNCTION IS_VALID_DOMAIN (p_DOMAIN IN VARCHAR2) RETURN BOOLEAN IS 
BEGIN 
    RETURN REGEXP_LIKE(p_DOMAIN, '^[a-z0-9][a-z.0-9]*[a-z]$'); 
end; 
+0

我認爲這個解決方案是一個很好的開始。它適用於:my.domain.com,但不適用於www.my-domain.com。 – 2010-11-04 10:25:31

0

坦克亞當霍克斯的想法。我發現了一些regExp,這是我想要的。該功能在這些情況下應該返回true:

  • 只有字母字符。
  • accept'。'和' - '但不是最初的字符,也不是最後的字符。

這應該是這樣的:

function isSyntaxeDomaineOk(pDomain varchar2) return boolean is 
begin 
    return regexp_like(pDomain, '^[a-z0-9][-a-z.0-9]*[a-z0-9]$'); 
end isSyntaxeDomaineOk; 
相關問題