【问题标题】:Regular Expression to validate email ending in .edu用于验证以 .edu 结尾的电子邮件的正则表达式
【发布时间】:2012-01-16 19:11:05
【问题描述】:

我正在尝试在 asp.net mvc 中创建一个正则表达式验证属性来验证输入的电子邮件是否具有 .edu TLD。

我尝试了以下方法,但表达式永远不会验证为真......

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

\w.\w@{1,1}\w[.\w]?.edu

谁能提供一些见解?

【问题讨论】:

  • 我将其分为两个不同的问题:validating an email address 的(众所周知的可怕的)问题,句号,以及验证字符串是否以.edu 结尾的更简单问题...
  • @djacobson:这听起来很像一个答案。
  • 我喜欢验证条目是和电子邮件并分别以 .edu 结尾的想法。我可以使用 mvc DataAnnotationsExtension 库毫无问题地检查有效的电子邮件。有人可以提供更新正则表达式来检查字符串中的最后 4 个字符是否为“.edu”,或者使用 .net 中的字符串类检查是否更容易/更好?
  • 你需要接受国际语言吗?如果是这样,请查看接受的答案,然后 mason 回答:stackoverflow.com/questions/2049502/… 先转换为 punycode。
  • @Adam Tuliper:无论如何,Edu 很难国际化,它是针对北美教育机构的,其他国家/地区有 ac.uk 或根本没有单独的域 - uu.se、helsinki.fi 等。跨度>

标签: c# asp.net asp.net-mvc regex asp.net-mvc-3


【解决方案1】:

这应该适合你:

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.+-]+\.edu$

因为你说你在 RegEx 上很弱,所以崩溃了:

^字符串开头

[a-zA-Z0-9._%+-]+ 一个或多个字母、数字、点、下划线、百分号、加号或破折号

@@

[a-zA-Z0-9.+-]+ 一个或多个字母、数字、点、加号或破折号

\.edu.edu

$字符串结束

【讨论】:

  • 您也应该允许像you@cs.example.edu 这样的子域。 localpart 正则表达式也有点太紧了,尽管我很快只能识别出相当理论的问题,比如不允许*@example.eduuucp!bang!path@example.edu
  • @tripleee 我不关注 - 正则表达式已经正确匹配 you@cs.example.edu
  • 对不起,我的错,应该用我的眼镜。 +1
【解决方案2】:

如果您使用 asp.net mvc 验证属性,则您的正则表达式实际上必须使用 javascript 正则表达式语法而不是 c# 正则表达式语法进行编码。有些符号是相同的,但你必须对此感到厌烦。

您希望您的属性如下所示:

 [RegularExpression(@"([0-9]|[a-z]|[A-Z])+@([0-9]|[a-z]|[A-Z])+\.edu$", ErrorMessage = "text to display to user")]

在字符串之前包含@的原因是为了制作一个文字字符串,因为我相信c#会在将它传递给正则表达式之前应用它自己的转义序列

(a|b|c) 匹配“a”或“b”或“c”。 [a-z] 匹配 a 和 z 之间的所有字符,大写字母和数字也类似,因此 ([0-9]|[a-z]|[A-Z]) 匹配任何字母数字字符

([0-9]|[a-z]|[A-Z])+ 匹配 1 个或多个字母数字字符。正则表达式中的 + 表示前面的 1 个或多个

@ 用于电子邮件地址中的“@”符号。如果它不起作用,您可能必须转义它,但我不知道 @ 在 javascript 正则表达式中的任何特殊含义

让我们进一步简化

[RegularExpression(@"\w+@\w+\.edu$", ErrorMessage = "text to display to user")]

\w 代表任何字母数字字符,包括下划线

阅读https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions 上的一些正则表达式文档以获取更多信息

【讨论】:

  • 这允许@#$%#%$#$@#$.mycollege!@!@!!@.edu,对电子邮件无效:)
  • 虽然 - 经过一番考虑,国际地址有我们不允许的字符。因此,除非您转换为 punycode,否则您可能希望允许所有内容不排除它们,在这种情况下,标准规则适用,您可以应用排除项。所以我注意到了操作问题
  • 我再次编辑了我的答案以解释正则表达式中的符号。您可以对其进行修改以允许我可能未包含的其他符号
  • [A-Za-z0-9] 更简单、更快捷时,这三个独立的字符类会怎样呢?此外,您不允许使用子域、各种特殊字符等。特别是,点在firstname.lastname@example.edu 等地址中非常常见。
【解决方案3】:

试试这个:

Regex regex = new Regex(@"^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.(edu)$", RegexOptions.IgnoreCase);

答案已更新...

【讨论】:

  • 阅读问题了吗,还是您刚刚看到emailregex
【解决方案4】:

你可能有不同的组合,可能是这个非常简单的组合:

\S+@\S+\.\S+\.edu

【讨论】:

    猜你喜欢
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多