2010-10-22 7 views
2

Je voudrais écrire une fonction PLSQL qui retourne vrai si le nom de domaine que je passe est valide.Comment écrire une fonction avec Oracle regexp pour tester un nom de domaine?

Je devrais utiliser l'expression régulière, mais je ne sais pas comment faire cela.

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; 

Des idées?

+0

Vous devez définir ce qui est valide et ce qui est invalide. Construire l'expression régulière serait construit à partir de cela. Ensuite, utilisez la fonction 'REGEXP_LIKE' pour faire la vérification en PL/SQL. –

+0

Quelle version d'Oracle? La prise en charge des regex d'Oracle n'a pas commencé avant 10g. Et qu'en est-il des sous-domaines - IE stackoverflow.com vs blog.stackoverflow.com? –

Répondre

0

J'ai finalement modifié ma fonction pour faire face à la '..' problème de 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

Mes compétences regex sont faibles, donc je suis en espérant que quelqu'un arrive et répare ce problème:

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

Je pense que cette solution est un bon début. cela fonctionne bien pour my.domain.com, mais pas pour www.mon-domaine.com. –

0

Réservoirs pour l'idée d'Adam Hawkes. J'ai trouvé un regExp qui fait ce que je veux. La fonction doit renvoyer true dans les cas suivants:

  • uniquement les caractères alphanum.
  • accepter '.' et '-' mais pas d'abord char et pas encore char.

Il est devrait ressembler à ceci:

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