2013-06-07 18 views
5

Kodumda EmailAddressAttribute (System.ComponentModel.DataAnnotations'dan) kullanıyorum ve harika çalışıyor. BA ve Test Sahiplerinin bir e-posta adresini nasıl doğruladığıyla ilgili kuralları bilmesi gerekir. Ben 900 karakter uzunluğunda ve regex becerilerim sınırlı olduğu için regex'in başını veya kuyruğunu yapabilirim.EmailAddressAttribute doğrulama kuralları

Kurallar bana basit terimlerle açıklanabilir mi?

Teşekkürler.

+6

Kişisel test e-postalar için kendi test durumları oluşturmalıdır. Test cihazına sadece ne işe yaracağının anlatılması amacı nedir? Sadece nasıl yapabildiklerini değil, nasıl yapabildiğini yapabildiklerini yapabilirler. – Matthew

cevap

4

Temel olarak, bir e-posta adres dizesinde "@" işaretinden önce ve sonra metinler vardır.

metinlerde, her karakter 2 kurallar uymalıdır: Ben aşağıda listelenmiştir

  1. [a-z]|\d|[!#\$%&'*+-/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]
  2. bazı unicode kodu kuralları olarak.

ilk kural metinde bir karakter aşağıdakilerden biri anlamına gelir:

  • az
  • bir rakam
  • bir Unicode aralığında !#\$%&'*+-/=\?\^_`{\|}~
  • arasında \u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF

Daha sonra metinlerile ayrılır


şey gibi olması gerekir: onlar geçmek ve başarısız gerektiğini düşünüyorum

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

Bu özel ifadenin daha kısa bir açıklamasından sonra olduğunu düşünüyorum – nixon