电子邮件ID验证在@符号之前不接受下划线

时间:2013-02-26 09:27:13

标签: c# regex email-validation

我有以下电子邮件ID验证代码。我正在使用正则表达式来执行此操作。 但是,以下电子邮件ID无效。

test_@gmail.com

正则表达式应该更改什么,以便传递电子邮件ID(test_@gmail.com

 public static bool IsValidEmail(string strIn)
        {
            invalid = false;
            if (String.IsNullOrEmpty(strIn))
                return false;

            // Use IdnMapping class to convert Unicode domain names. 
            try
            {

                strIn = Regex.Replace(strIn, @"(@)(.+)$", DomainMapper);

            }
            catch (Exception e)
            {
                Utility.writeToLogFile(String.Format("Error while validating the Email Address {0}. Error Code.e", strIn.ToString(), e));
                return false;
            }

            if (invalid)
                return false;

            // Return true if strIn is in valid e-mail format. 
            try
            {
                return Regex.IsMatch(strIn,
                      @"^(?("")(""[^""]+?""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" +
                      @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9]{2,17}))$",
                      RegexOptions.IgnoreCase);


            }
            catch (Exception e)
            {
                Utility.writeToLogFile(String.Format("Error while validating the Email Address {0}. Error Code.e", strIn.ToString(), e));
                return false;
            }
        }

1 个答案:

答案 0 :(得分:1)

你的正则表达式失败

  

test_@gmail.com

因为部分(?<=[0-9a-z])@在“@”之前明确要求字母或数字。

对于解决方案,我建议this answer,就像Eduard Dumitru在评论中一样。