电子邮件ID的正则表达式检查失败

时间:2015-07-03 06:16:00

标签: c# regex windows-phone-8 windows-phone-8.1 email-validation

我从docs检查了电子邮件ID的正则表达式。但是当_和@一个接一个地出现时它失败了。

表达式:

 @"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" +
                @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$",

示例:check_@hotmail.com即使是有效的ID也会失败。

我需要在哪里更改字符串,它看起来非常混乱,我不明白。

5 个答案:

答案 0 :(得分:3)

将正则表达式中的(?<=[0-9a-z])@更改为(?<=[0-9a-z_])@

(?<=[0-9a-z])@断言匹配@必须以0-9a-z开头。

因此,在char类中添加_也会允许_出现在@之前。

断言只是不够,我们必须添加真实的字符(即实际匹配下划线符号的模式)。别担心,在\w之前存在的char类中,lookbehind + @将为您完成。

答案 1 :(得分:1)

这就是我正在使用的:

mRegex = new Regex(@"^([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])\])$");

工作正常

答案 2 :(得分:0)

正是因为你的正则表达式中的这个东西

    public bool IsValid(string emailaddress)
      {
       try
    {
        MailAddress m = new MailAddress(emailaddress);

        return true;
    }
    catch (FormatException)
    {
        return false;
    }
}

在“@”之前明确要求字母或数字。

最好使用Microsoft EmailAddress Validation属性来验证电子邮件地址而不是Regex。或者使用此功能验证服务器端的电子邮件地址。

{{1}}

答案 3 :(得分:0)

您可以使用:“\ w +([ - +。'] \ w +) @ \ w +([ - 。] \ w +)。\ w +([ - 。] \ w +) *”。我希望这会奏效。

答案 4 :(得分:0)

是的,你是对的,它还没有在Windows Phone 8中提供。 您可以使用以下内容来验证电子邮件:

using System;
using System.Text.RegularExpressions;
public static bool IsValidEmail(string strIn)
{
   // Return true if strIn is in valid e-mail format.
      return Regex.IsMatch(strIn, 
      @"^[\w!#$%&'*+\-/=?\^_`{|}~]+(\.[\w!#$%&'*+\-/=?\^_`{|}~]+)*"
      + "@"
      + @"((([\-\w]+\.)+[a-zA-Z]{2,4})|(([0-9]{1,3}\.){3}[0-9]{1,3}))$"); 
}
相关问题