【发布时间】:2016-09-22 21:24:30
【问题描述】:
在验证电子邮件地址时,我尝试使用 System.ComponentModel.DataAnnotations 中的 EmailAddressAttribute 类:
[EmailAddress(ErrorMessage = "Invalid Email Address")]
public string Email { get; set; }
以及来自System.Net.Mail 的MailAddress 类:
bool IsValidEmail(string email)
{
try {
var addr = new System.Net.Mail.MailAddress(email);
return addr.Address == email;
}
catch {
return false;
}
}
如C# code to validate email address 中所建议的那样。这两种方法原则上都有效,它们捕获无效的电子邮件地址,例如user@,不符合格式user@host。
我的问题是这两种方法都没有检测到用户字段中的无效字符,例如æ, ø, or å (e.g. åge@gmail.com)。这些字符没有返回验证错误有什么原因吗?是否有人对如何在用户字段中合并无效字符的验证有一个优雅的解决方案?
【问题讨论】:
-
@Think 不,不要提出这样的可怕做法。
-
@Think2ceCode1ce 不,请不!不要用正则表达式来解析邮件地址,都是错的,都是错的!
-
@Think 是的,人们多年来一直在做错事。使用正则表达式验证电子邮件地址是没有意义的。您将挫败并排除合法用户。已经有很多关于这个主题的讨论,例如this one。
-
@Think 另请参阅How to Find or Validate an Email Address: “不要过分尝试使用正则表达式消除无效的电子邮件地址。原因是您并不真正知道地址是否在您尝试向其发送电子邮件之前有效。[...] 如果您确实需要确保电子邮件地址有效,则需要向其发送电子邮件“
-
@CodeCaster 太好了。今天学到了一些东西。
标签: c# asp.net .net email email-validation