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

Regular expression check for email ID fails

我从 MSDN 得到了电子邮件 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。

哪里需要修改字符串,看起来很乱,看不懂

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

(?<=[0-9a-z])@ 断言匹配 @ 之前必须有 0-9a-z.

因此,通过在 char class 中添加 _ 也将允许 _@.

之前出现

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

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

    (?<=[0-9a-z])@

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

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

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

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

这是我正在使用的:

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])\])$");

效果很好

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

是的,您是对的,它在 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}))$"); 
}