2

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

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

这适用于我测试过的所有电子邮件地址,前提是“@”之前的位至少有四个字符长。

作品:

web1@domain.co.uk

不起作用:

web@domain.co.uk

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

4

6 回答 6

3

在 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+ 个字符

于 2013-02-12T13:42:11.467 回答
2

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

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

于 2013-02-12T13:57:48.927 回答
0

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

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

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

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

于 2013-02-12T13:41:13.800 回答
0

我建议不要使用正则表达式来验证电子邮件(出于此处列出的原因)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;
        }
    }
于 2013-02-15T18:59:26.500 回答
0

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

new MailAddress(email);

看起来不是很令人满意,因为它认为“a@a”是一个有效的地址,事实上它不会为几乎任何匹配正则表达式“*.@.*”的字符串引发异常,这显然是太宽松了例如

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

不会引发异常。

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

这个例子很满意

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

于 2015-07-13T13:02:05.243 回答
-1

你也可以试试这个

^[a-zA-Z0-9._-]*@[a-z0-9._-]{2,}\.[a-z]{2,4}$
于 2013-02-12T13:42:50.023 回答