如何使用 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 正则表达式如何提取AABAAB类型的数据?

Oracle 正则表达式函数-REGEXP_LIKE 使用例子

oracle 去掉字符,剩下数字

Oracle 正则表达式函数-REGEXP_SUBSTR 使用例子

Oracle 正则表达式函数-REGEXP_REPLACE 使用例子

使用正则表达式解析 Oracle 脚本