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

本文关键字:检查 失败 正则表达式 ID 电子邮件 | 更新日期: 2023-09-27 18:00:52

我从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。

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

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

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

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

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

断言还不够,我们必须添加真正的字符(即实际匹配下划线符号的模式(。别担心,在lookbehind + @之前存在的char类中的'w会为您执行此操作。

这就是我正在使用的:

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

它工作良好

这是因为正则表达式中的这件事

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

明确要求在"@"之前有一个字母或数字。

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

    public bool IsValid(string emailaddress)
      {
       try
    {
        MailAddress m = new MailAddress(emailaddress);
        return true;
    }
    catch (FormatException)
    {
        return false;
    }
}

您可以使用以下命令:"''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}))$"); 
}