如何使用 Oracle 正则表达式编写函数来测试域名?
Posted
技术标签:
【中文标题】如何使用 Oracle 正则表达式编写函数来测试域名?【英文标题】:How to write a function with Oracle regexp to test a domaine name? 【发布时间】:2010-10-22 15:35:29 【问题描述】:我想写一个PLSQL函数,如果我传递的域名有效则返回true。
我应该使用正则表达式,但我不知道该怎么做。
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;
有什么想法吗?
【问题讨论】:
您需要定义什么是有效的,什么是无效的。构建正则表达式将以此为基础。然后,使用REGEXP_LIKE
函数在 PL/SQL 中进行检查。
什么版本的Oracle? Oracle 的正则表达式支持直到 10g 才开始。那么子域呢 - IE ***.com vs blog.***.com?
【参考方案1】:
我的正则表达式技能很弱,所以我希望有人来解决这个问题:
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;
【讨论】:
我认为这个解决方案是一个好的开始。它适用于:my.domain.com,但不适用于 www.my-domain.com。【参考方案2】:支持亚当霍克斯的想法。我找到了一些可以满足我需求的正则表达式。在这些情况下,该函数应返回 true:
仅限字母数字字符。 接受'.'和 '-' 但不是第一个字符,也不是最后一个字符。应该是这样的:
function isSyntaxeDomaineOk(pDomain varchar2) return boolean is
begin
return regexp_like(pDomain, '^[a-z0-9][-a-z.0-9]*[a-z0-9]$');
end isSyntaxeDomaineOk;
【讨论】:
【参考方案3】:我终于修改了我的函数来处理'..'出现问题:
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。
【讨论】:
以上是关于如何使用 Oracle 正则表达式编写函数来测试域名?的主要内容,如果未能解决你的问题,请参考以下文章
Oracle 正则表达式函数-REGEXP_LIKE 使用例子
Oracle 正则表达式函数-REGEXP_SUBSTR 使用例子