参考: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字符在那里它必须在任何位置 @ 之前。
请帮助我使用正则表达式,它可以检查任何一个场景,结果我是真的。