正则表达式拒绝每封电子邮件

时间:2015-06-09 00:47:21

标签: regex vb.net

我正在使用以下代码"继续"用于查看电子邮件地址文本字段的按钮。

        If Regex.IsMatch(txtEmail.Text, "^(?("")("".+?(?<!\\)""@)|(([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]))$",
             (RegexOptions.IgnoreCase)) Then
        pnlInvalidEmail.Visible = False
    Else
        pnlInvalidEmail.Visible = True
        Exit Sub
    End If

我遇到的问题是正则表达式(从here收缩)正在检查文本框,但没有任何内容通过检查。无论我在文本字段中输入什么内容,它都会检查失败并显示我的警告面板。

我哪里错了?除了尝试使用正则表达式验证电子邮件?

3 个答案:

答案 0 :(得分:3)

我会改变你的正则表达式,因为很难对它进行故障排除。

我会使用另一个正则表达式:

^\w+[.\w]*@\w+([.]\w+)([.][a-z]{2,3})?$

Regular expression visualization

<强> Working demo

答案 1 :(得分:1)

试试这个..

"^[_a-z0-9-]+(.[a-z0-9-]+)@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,4})$"

答案 2 :(得分:0)

必须是自定义电子邮件正则表达式。我不会试图给你一个更好的, 但会尽力帮助你理解为什么它不会让任何事情发生。

如果你专注于这一部分 你可以看到问题。基本上这个断言(?<= [0-9a-z] )只允许一个表格 -
一个alphanum char然后是@符号。

   |  (?:
           (?:
                [0-9a-z] 
                (?:
                     (?:
                          \.
                          (?! \. )
                     )
                  |  [-!#\$%&'\*\+/=\?\^`\{\}\|~\w] 
                )*
           )
           (?<= [0-9a-z] )
           @
      )

显然,从正则表达式条件来看,它们也允许匹配".."@[..]@
只使用另一个香草正则表达式就不允许这样做。