2013-06-07 16 views
5

Ho utilizzato il EmailAddressAttribute (da System.ComponentModel.DataAnnotations) nel mio codice e ha funzionato benissimo. I BA e i Testers devono conoscere le regole su come convalida un indirizzo email. Posso fare la testa o coda della regex in quanto è 900 caratteri e le mie abilità regex sono limitate.EmailAddressAttribute regole di convalida

Qualcuno può spiegarmi le regole in termini semplici?

Grazie.

+6

I suoi tester devono creare i propri casi di test per le email che pensano dovrebbe passare e non riescono. Qual è lo scopo di dire al tester solo cosa funzionerà? Dovrebbero solo preoccuparsi di ciò che può fare ciò che pubblicizza che può fare, non come lo realizza. – Matthew

risposta

4

Fondamentalmente, in una stringa di indirizzo e-mail, si dispone di testi prima e dopo il segno "@".

Ogni personaggio nei testi deve corrispondere 2 regole:

  1. [a-z]|\d|[!#\$%&'*+-/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]
  2. alcune regole del codice Unicode come ho elencato qui di seguito.

La prima regola indica un char nel testo può essere uno dei seguenti:

  • az
  • qualsiasi cifra
  • uno dei !#\$%&'*+-/=\?\^_`{\|}~
  • nella gamma unicode \u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF

Quindi i testi sono separati da .


Dovrebbe essere qualcosa di simile:

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

Penso che fosse dopo una spiegazione più concisa di questa particolare espressione – nixon

Problemi correlati