【问题标题】:Regular expression check for email ID fails电子邮件 ID 的正则表达式检查失败
【发布时间】:2015-09-20 21:05:58
【问题描述】:

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

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

【问题讨论】:

  • 由于有一个正式的电子邮件地址规范,有没有人知道一个正式批准的正则表达式正是这个规范?

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


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    这就是我正在使用的:

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

    效果很好

    【讨论】:

      【解决方案3】:

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

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

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

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

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

      【讨论】:

      • 我没有看到 MailAdress。认为 System.ComponentModel.DataAnnotations 尚不适用于 Windows Phone 8.1
      • 它现在对 Windows Phone 8.1 有效吗?
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2017-01-31
          • 1970-01-01
          • 2017-10-05
          • 2017-06-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-05-10
          • 1970-01-01
          相关资源
          最近更新 更多