2016-04-29 5 views
5

Ich möchte, dies zu tun in der Lage:Validieren eine E-Mail-String in .net mit EmailAddressAttribute, aber nicht auf einem Attribut

string email = "[email protected]"; 
bool isValid = IsValidEmail(email); 
//returns true 

... aber die Logik Microsoft hat uns bereits EmailAddressAttribute in gegeben verwenden .

Es gibt Hunderte von guten und schlechten Implementierungen von IsValidEmail da draußen, und ich möchte nicht meine eigenen hinzufügen, wenn ich etwas verwenden kann, hat Microsoft bereits darüber nachgedacht. Es liegt nahe, dass sie einen besseren Job machen als ich.

In den letzten ASP.Net Versionen, haben wir System.ComponentModel.DataAnnotations, die uns mit der ausgezeichneten EmailAddressAttribute bietet, die uns unsere Modelle wie diese dekorieren lässt:

public class SomeModel 
{ 
    [EmailAddress] 
    public string Email { get; set; } 
} 

Die class is sealed, so kann ich nicht nennen EmailAddressAttribute.IsValid()

Gibt es eine gute Möglichkeit, die ich nutzen kann, was Microsoft bereits getan hat? Gibt es irgendwo im .NET-Framework eine Methode, mit der ich Zeichenketten auf Datenanmerkungen prüfen kann, die ich übersehen habe?

Etwas nach dem Vorbild von ..:

var emailChecker = new DataAnnotationsChecker<EmailAddressAttribute>(); 
string email = "[email protected]"; 
bool isValid = emailChecker.IsValid(email); 
//returns true 

Wenn Sie können sich nicht vorstellen, warum ich das wollen würde, denken Sie an eine Liste bekommen und wollen, welche überprüfen gelten E-Mails.

Antwort

4

Sie könnten die EmailAddressAttribute verwenden, um die Validierung durchzuführen.

Die sealed bedeutet, dass Sie keine andere Klasse erstellen können, die von ihr erbt. Bedeutet nicht, dass Sie es nicht benutzen können.

einige Unit-Tests erstellt und arbeitet

[TestMethod] 
public void Should_Use_Email_Address_Attribute_To_Validate_Email() { 
    var emailChecker = new System.ComponentModel.DataAnnotations.EmailAddressAttribute(); 
    string email = "[email protected]"; 
    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 = "[email protected] l.com"; 
    bool isValid = emailChecker.IsValid(email); 
    Assert.IsFalse(isValid); 
} 
+0

fein Ich habe geschworen hätte, ich habe bereits versucht, dass ... Aber natürlich tut dies in der Tat der Arbeit. Ich fühle mich jetzt albern. Vielen Dank. :) – Kjensen

+0

Ich bin froh zu helfen. (damit du dich nicht albern fühlst) :) – Nkosi

+0

Eine ernsthafte Frage hier: Warum ist das nicht die anerkannte/akzeptierte Methode zum Überprüfen von E-Mail-Adressen in .Net? Microsoft wird E-Mail-Validierung besser als jeder von uns tun. –