2013-06-07 10 views
5

Ich habe das EmailAddressAttribute (from System.ComponentModel.DataAnnotations) in meinem Code verwendet und es hat gut funktioniert. Die BAs und Tester müssen die Regeln zur Validierung einer E-Mail-Adresse kennen. Ich kann den Regex Kopf oder Schwanz machen, da er 900 Zeichen lang ist und meine Regex-Fähigkeiten begrenzt sind.EmailAddressAttribute Validierungsregeln

Kann mir jemand die Regeln in einfachen Worten erklären?

Danke.

+6

Ihre Tester sollten ihre eigenen Testfälle für E-Mails erstellen sie denken sollte passieren und scheitern. Was ist der Zweck, dem Tester nur zu sagen, was funktionieren wird? Sie sollten sich nur darum kümmern, dass es tun kann, was es bewirbt, und nicht, wie es es schafft. – Matthew

Antwort

4

Grundsätzlich, in einer E-Mail-Adresse Zeichenfolge, haben Sie Texte vor und nach "@" Zeichen.

Jedes Zeichen in Texten 2 Regeln sollten übereinstimmen:

  1. [a-z]|\d|[!#\$%&'*+-/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]
  2. einige Unicode-Coderegeln, wie ich weiter unten.

Die erste Regel bedeutet ein Zeichen in Text eine der folgenden sein kann:

  • az
  • beliebige Ziffer
  • einem der !#\$%&'*+-/=\?\^_`{\|}~
  • im Unicode-Bereich \u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF

Dann werden Texte durchgetrennt


Es sollte etwas sein wie:

private static Regex _regex = new Regex(@"^ 
(
    (
     ([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+ 
     (\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)* 
    ) 
    | 
    (
     (\x22) 
     (
     (((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)? 
     (
      ([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])| 
      (\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])) 
     ) 
     )* 
     (((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22) 
    ) 
) 

@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture); 
+4

Ich denke, er war nach einer präziseren Erklärung dieses bestimmten Ausdruckes – nixon

Verwandte Themen