首页 > 解决方案 > 正确的电子邮件 Oracle

问题描述

我有一个带有电子邮件字段的表格,该字段只能包含以下字符:

'abcdefghijklmnopqrstuvwxyz0123456789。@_- +'

您如何检查电子邮件字段以了解我是否有与我提到的字符不同的字符('abcdefghijklmnopqrstuvwxyz0123456789.@_- +')?

标签: oracle

解决方案


这听起来像是正则表达式的完美工作 - 只需检查电子邮件是否包含任何不在您列表中的字符。您可以regexp_like为此使用:

regexp_like(e_mail, '[^-a-z0-9.@_ +]')

(我已将 a...z 和 0..9 替换为各自的范围 - 更短且更具可读性。请注意,连字符 '-' 必须是初始插入符号 '^' 之后的第一个字符,以表明它是一个文字连字符,而不是字符范围的一部分)。

简单的测试用例:

with v_data(e_mail) as (
  select 'xyz@abc.com' from dual union all
  select 'xyz(@def.com' from dual union all
  select 'ab123-def@gmail.com' from dual
)
select 
  e_mail,
  (case 
     when regexp_like(e_mail, '[^-a-z0-9.@_ +]') then 'NO' 
     else 'YES' 
   end) as is_valid_email
from v_data

然而,一个有效的电子邮件地址可以包含大量的附加字符——例如大写字母。


推荐阅读