非ASCII以及ASCII字符oracle的正则表达式

时间:2017-11-21 14:58:28

标签: regex oracle

参考:regex to find and avoid double dots in Oracle

我有要求检查是否存在非ASCII字符以及ASCII字符(非ASCII字符可能存在也可能不存在)。

对于ASCII字符(电子邮件验证),下面的结果为True

DECLARE 
v_email varchar2(100);
v_constant CONSTANT VARCHAR2(300) := '^(([a-zA-Z0-9_"\-])([a-zA-Z0-9_\.\/%+="''\-]*)@(\[((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}|((([a-zA-Z0-9\-]+)\.)+))([a-zA-Z]{2,}|(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\]))$';

BEGIN
  v_email := 'sample.test2@oracle.com';
if regexp_like(v_email, v_constant) then

  pl('YES: ' || v_email);
else
  pl('NO: ' || v_email);
end if;
END; 

如果对于电子邮件验证的非ASCII字符,则结果为True:

DECLARE 
v_email varchar2(100);
v_constant CONSTANT VARCHAR2(300) := '^(([a-zA-Z0-9_"\-])[^\p{Alpha} ]([a-zA-Z0-9_\.\/%+="''\-]*)@(\[((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}|((([a-zA-Z0-9\-]+)\.)+))([a-zA-Z]{2,}|(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\]))$';

BEGIN
  v_email := 'sämple.test2@oracle.com';
if regexp_like(v_email, v_constant) then

  pl('YES: ' || v_email);
else
  pl('NO: ' || v_email);
end if;
END; 

但是现在我有一个场景,我必须合并两个条件,电子邮件必须有非ASCII字符(它可以或不能有ASCII字符)是强制性的。但如果非ASCII字符在那里它必须在任何位置 @ 之前。

请帮助我使用正则表达式,它可以检查任何一个场景,结果我是真的。

0 个答案:

没有答案