czwartek, 28 marca 2013

Czytelność regex

Mam pomysł na polepszenie czytelności regexów.
Dajmy na to, że ktoś stworzył walidację dla maila. Zapisał wzorzec w takiej postaci:
    const string regexPattern = 
@"\b(?<name>[A-Za-z0-9._%+-]+)@(?<domain>([A-Za-z0-9-]+\.)+[A-Za-z]{2,4})\b";
W takiej postaci ciężko jest (przynajmniej dla mnie) ciężko wywnioskować co może przedstawiać dany wzorzec. Proponuje inną postać zapisu takiego stringa:
#region RegExs
    const string regexPattern = @"
\b                  #znak początku wyrazu
(?<name>            #początek grupy [name]
[A-Za-z0-9._%+-]        #dozwolone znaki w nazwie loginu 
+                       #  1..* wcześniejszych znaków
)                   #zakończenie grupy name 
@                   #małpa
(?<domain>          #początek grupy [domain]
(                       #początek sub-domeny
[A-Za-z0-9-]+              #nazwa członu sub-domeny
\.                         #kropka między członami sub-domen
)                       #koniec sub-domeny
+                       # 1..* członów sub-domen
[A-Za-z]                #dozwolone nazwy w top-level-domain
{2,4}                   # 2..4 wcześniejszych znaków  
)                   #zakończenie grupy doamin
\b                  #znak końca wyrazu
";
#endregion
Tak zapisany regex jest lepiej opisany.
  • Wiemy w jakim przedziale przedstawia się dana grupa
  • Szybko zauważamy nazwy grup
  • Mamy opisane wszystkie symbole
  • Znamy dozwolone znaki
  • Obszar wzorców jest zapisany w regionie, więc możemy go ukryć
Mam nadzieję, że pomysł ci się podoba.



Brak komentarzy:

Prześlij komentarz