繁体   English   中英

电子邮件#2的正则表达式

[英]Regular Expression for Email #2

我有一个正则表达式,用于检查字符串是否是电子邮件地址:

@"^((([\w]+\.[\w]+)+)|([\w]+))@(([\w]+\.)+)([A-Za-z]{1,3})$"

对于我测试过的所有电子邮件地址,此功能都可以正常工作,前提是“ @”之前的位长至少四个字符。

作品:

web1@domain.co.uk

不起作用:

web@domain.co.uk

如何更改正则表达式以允许少于4个字符的前缀?

在asp.net mvc帐户模型中用于电子邮件验证的“标准”正则表达式如下:

@"^[\w-]+(\.[\w-]+)*@([a-z0-9-]+(\.[a-z0-9-]+)*?\.[a-z]{2,6}|(\d{1,3}\.){3}\d{1,3})(:\d{4})?$"

@之前允许1个以上的字符

我认为检查有效电子邮件地址的最佳方法是让用户键入两次,然后向他发送电子邮件,并使用验证链接对他收到该电子邮件的事实提出质疑。

再次检查您的正则表达式,并列出奇怪的有效电子邮件地址 ,您会发现正则表达式不适用于电子邮件验证任务。

您可以使用此正则表达式作为替代:

^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$

它的描述可以在这里找到。

关于您的正则表达式,开始部分(([\\w]+\\.[\\w]+)+)强制电子邮件地址在开始处包含四个字符。 修改此部分将为您完成工作。

我建议不要使用正则表达式来验证电子邮件(出于此处概述的原因) http://davidcel.is/blog/2012/09/06/stop-validating-email-addresses-with-regex/

如果您无法发送确认电子邮件,则C#中的一个不错的选择是尝试创建MailAddress并检查它是否失败。

如果您使用的是ASP.NET,则可以使用CustomValidator调用此验证方法。

    bool isValidEmail(string email)
    {
        try
        {
            MailAddress m = new MailAddress(email);
            return true;
        }
        catch
        {
            return false;
        }
    }

验证答案中使用的小技巧,即捕获异常

new MailAddress(email);

似乎并不令人满意,因为它认为“ a @ a”是有效地址,实际上,它几乎没有对匹配正则表达式“ *。@。*”的任何字符串引发异常,例如,显然太宽容了

new MailAddress("¦#°§¬|¢@¢¬|") 

不会引发异常。

因此,我显然会去进行正则表达式匹配

这个例子很令人满意

https://msdn.microsoft.com/en-us/library/01escwtf%28v=vs.110%29.aspx

您也可以尝试这个

^[a-zA-Z0-9._-]*@[a-z0-9._-]{2,}\.[a-z]{2,4}$

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM