我希望能够做到这一点:
string email = "some@email.com";
bool isValid = IsValidEmail(email);
//returns true
...但是使用Microsoft已经在 EmailAddressAttribute 中提供给我们的逻辑。
有很多好的和坏的IsValidEmail实现,我不想添加自己的,当我可以使用的东西,微软已经考虑过。按理说,他们会比我做得更好。
在最近的ASP.Net版本中,我们有System.ComponentModel.DataAnnotations,它为我们提供了优秀的EmailAddressAttribute,让我们可以像这样装饰我们的模型:
public class SomeModel
{
[EmailAddress]
public string Email { get; set; }
}
class is sealed,所以我无法调用EmailAddressAttribute.IsValid()
有没有一种好方法可以利用微软已经做过的事情?在.Net框架中的某个地方是否有一个方法,让我测试字符串与数据注释,我忽略了?
......的一些事情:
var emailChecker = new DataAnnotationsChecker<EmailAddressAttribute>();
string email = "some@email.com";
bool isValid = emailChecker.IsValid(email);
//returns true
如果您无法想象为什么我会想要这个,请考虑获取一个列表并想要检查哪些是有效的电子邮件。
答案 0 :(得分:12)
您可以使用EmailAddressAttribute
进行验证。
sealed
表示您无法创建从其继承的另一个类。并不意味着你不能使用它。
创建了一些单元测试并且工作正常
[TestMethod]
public void Should_Use_Email_Address_Attribute_To_Validate_Email() {
var emailChecker = new System.ComponentModel.DataAnnotations.EmailAddressAttribute();
string email = "some@email.com";
bool isValid = emailChecker.IsValid(email);
Assert.IsTrue(isValid);
}
[TestMethod]
public void Should_Use_Email_Address_Attribute_To_Invalidate_Email() {
var emailChecker = new System.ComponentModel.DataAnnotations.EmailAddressAttribute();
string email = "some@emai l.com";
bool isValid = emailChecker.IsValid(email);
Assert.IsFalse(isValid);
}
答案 1 :(得分:0)
使用MailAddress
即使从' Elmer Fudd
private string? ExtractEmailAddress(string raw)
{
try
{
var address = new MailAddress(raw);
return address.Address;
}
catch (Exception)
{
return null;
}
}
我还使用[EmailAddress]
属性来指示API文档所需的类型。