【问题标题】:regex to check valid email in oracle正则表达式检查 oracle 中的有效电子邮件
【发布时间】:2017-12-15 05:31:02
【问题描述】:

下面的正则表达式验证几乎所有有效和无效的电子邮件地址:https://blogs.msdn.microsoft.com/testing123/2009/02/06/email-address-test-cases/

代码:

DECLARE 
    v_email webowner.person.email%TYPE;
    v_constant CONSTANT VARCHAR2(300) := '^(([a-zA-Z0-9"_\-])((\.?[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 := 'email@domain.com';
    if regexp_like(v_email, v_constant) then

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

但是现在出现了这种情况,它需要最少 2 个字符(在“@”之前的用户名部分),而我只需要一个强制性字符。

例如

p@domain.com

【问题讨论】:

标签: regex oracle


【解决方案1】:

最简单的就是去掉第一个字符,即([a-zA-Z0-9"_\-])

但一般来说,不要使用正则表达式验证电子邮件。如果你这样做了,你可以很确定你会做错事。验证电子邮件地址的最佳方式是发送验证邮件。

如果您出于某种原因真的想使用正则表达式,我建议您这样做:

^.*@.+$

这意味着唯一的要求是它应该有一个“@”,后跟至少一个字符。您也可以使用它来保证它在@ 之前至少有一个字符:

^.+@.+$

有地址标准,但并非所有电子邮件服务器都遵循这些标准。完全可以设置处理地址.@domain.com@domain.com 的邮件服务器,这在标准中是不允许的。但如果地址有效,为什么要阻止它呢?很快,@ 左边的所有内容都应该由服务器处理,所以不要验证它。

实际上,我可以看到验证这样一封电子邮件的唯一原因是确保用户没有输入他的电话号码或姓名或类似的东西,而不是电子邮件地址。为此,只需检查地址是否包含“@”就足够了,您可以这样做:

^.*@.*$

有关如何实现有效的正则表达式以及为什么不应该这样做的更多信息,请阅读以下内容:

http://www.regular-expressions.info/email.html

https://davidcel.is/posts/stop-validating-email-addresses-with-regex/

Using a regular expression to validate an email address

【讨论】:

    猜你喜欢
    • 2017-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    相关资源
    最近更新 更多