2010-10-22 3 views
2

Я хотел бы написать функцию PLSQL, которая возвращает true, если имя домена, которое я передаю, является действительным.Как написать функцию с Oracle regexp для проверки имени домена?

Я должен использовать регулярное выражение, но я не знаю, как это сделать.

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. –

+0

Какая версия Oracle? Поддержка регулярного выражения Oracle не начиналась до 10g. А как насчет субдоменов - IE stackoverflow.com vs blog.stackoverflow.com? –

ответ

0

я, наконец, изменил мою функцию, чтобы иметь дело с '..' проблемой:

встречаемости
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. –

0

Баки для идеи Адама Хоукс. Я нашел некоторый regExp, который делает то, что я хочу. Функция должна возвращать значение true в этих случаях:

  • только буквы alphanum.
  • принять '.' и '-', но не первый символ, а не последний символ.

Это должно быть так:

function isSyntaxeDomaineOk(pDomain varchar2) return boolean is 
begin 
    return regexp_like(pDomain, '^[a-z0-9][-a-z.0-9]*[a-z0-9]$'); 
end isSyntaxeDomaineOk; 
Смежные вопросы