如何在我的电子邮件验证中阅读正则表达式

Posted

技术标签:

【中文标题】如何在我的电子邮件验证中阅读正则表达式【英文标题】:How to read regex in my Email Validation 【发布时间】:2016-01-04 06:40:27 【问题描述】:

我找到了一个使用正则表达式来验证电子邮件的解决方案。 但我真的不明白如何正确阅读它,因为这是我第一次使用正则表达式。 谁能解释我如何用 Words 阅读它?因为用 if 语句创建它会很痛苦。

我的代码:

if (string.IsNullOrWhiteSpace(textBox4.Text))

    label8.Text = "E-pasts netika ievadīts!";

else

    Regex emailExpression = new Regex(@"^[a-zA-Z][\w\.-]2,28[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$");
    if (emailExpression.IsMatch(textBox4.Text))
    
        label8.Text = "";
    
    else
    
        label8.Text = "E-pasts ievadīts nepareizi!";
    

【问题讨论】:

我可以推荐 Lea Verou 关于正则表达式的演讲。见youtube.com/watch?v=EkluES9Rvak 【参考方案1】:

对于正则表达式,请点击链接:http://www.regexr.com/

粘贴你的正则表达式[a-zA-Z][\w\.-]2,28[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]

将鼠标悬停在每个文本上,您将了解它们的含义

几个例子:

a-z 将匹配 a 到 z 范围内的字符

A-Z 将匹配 A-Z 范围内的字符

\w 匹配任何单词字符

2,28 匹配前一个令牌的 2 到 28 个

【讨论】:

【参考方案2】:

这里是细分。请注意所有[ ] 都是一组 单个项目,以下可以是*(零个或多个)+ 一个或多个或 , (最小和max) 次。

如果将模式设置为显示固有模式,实际上更容易理解,只要在关键点上加标签即可;我会这样做:

var pattern = @"
^                  # Beginning of line, data must start here instead of matching any location *away from the start*.
      [a-zA-Z]         # A set of characters from a-z and A-Z but just one
      [\w\.-]2,28    # A set of any word character \w=a-zA-Z0-9 with a literal period and dash; but minimum of 2 to a max of 28 characters. 
      [a-zA-Z0-9]      # Could be replaced with a single \w; this ensure that there is a character and not a non character before the @
  @                # Literal `@`
      [a-zA-Z0-9]      # same as \w; ensures a character
      [\w\.-]*         # '*' = Zero or more of the set with a literal period in the set.
      [a-zA-Z0-9]      # same as \w; ensures a character
 \.                # Literal Period must be matched.
      [a-zA-Z]         # A set of characters from a-z and A-Z but just one
      [a-zA-Z\.]*      # zero or more characters with a literal period `.`.
      [a-zA-Z]         # same as \w; ensures a character
$                  # End; contrains the whole match with the `^` so no loose characters are left out of the match
";

// IgnorePatternWhitespace allows us to comment the pattern; does not affect processing in any way.
Regex.IsMatch("abcd@def.com", pattern, RegexOptions.IgnorePatternWhitespace); // True/Valid
Regex.IsMatch("1abcd@def.com", pattern, RegexOptions.IgnorePatternWhitespace);// False/Invalid
Regex.IsMatch("abc@def.com", pattern, RegexOptions.IgnorePatternWhitespace);  // False/Invalid

请注意,在测试#3 中发现的模式存在逻辑缺陷。对于abc@def.com 将失败,因为该模式在@ 之前的第一个字符和最后一个字符前缀之间查找至少2 个字符。我会将其更改为*,而不是这意味着零个或多个。

【讨论】:

以上是关于如何在我的电子邮件验证中阅读正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

使用 mysql 正则表达式验证我的 google bigquery 数据库中的电子邮件地址

正则表达式从字符串中查找电子邮件地址

为初学者阅读正则表达式

验证电子邮件不盲目接受的最简单的正则表达式是啥? [关闭]

EmailAddressAttribute 验证规则

使用正则表达式验证电子邮件