11. december

Begynd med regulære udtryk: Snup datoen

Når brugere kan få lov til selv at taste en dato ind på en web-side, kan der komme mange sjove ting ud af det. Regulære udtryk er en stor hjælp når datoer skal valideres

Når brugeren taster en dato ind (i Danmark), kan det se således ud:

1/2 2001
1-2-2001
1-2 2001
01/02 2001

Er man som programmør lidt flink, så kan man nemt fange alle kombinationer.

 $dato = "1/2 2001";
 if (preg_match("/^\D*(\d{1,2})\D+(\d{1,2})\D+(\d{4})\D*$/", $dato, $match )) {
   $dag = $match[1];
   $maaned = $match[2];
   $aar = $match[3];
 }
Er man ny udi regulære udtryk, er det på plads med en forklaring:
  1. '/' det første tegn angiver seperator. Tit bruges også '|'
  2. '^' start af linien
  3. '\D*' der kan forekomme tegn i starten, der ikke er tal. '\D' er det samme som '[^0-9]', dvs. ikke tal
  4. '(\d{1,2})' dagen kan være angivet med et eller to tal. '\d' er det samme som '[0-9]' og er en forkortelse. Parantesen sørger for at det resultat der matcher bliver samlet op i variablen $match[1]
  5. '\D+' efter dagen følger et eller flere tegn som ikke er tal
  6. '(\d{1,2})\D+' her fanges måned på samme måde som dagen
  7. '(\d{4})' her er det årstallet der matches ind i variablen $match[3]. Skulle man være mere flink og tage 2-tals årstal med, kunne vi skrive '(\d{2,4})', altså enten kommer der 2 eller 4 tal. Hvis vi accepterer at brugeren slet ikke taster årstal bliver det '(\d{0,2,4})'
  8. '\D*' efter årstal må der gerne komme tegn, bare ikke tal
  9. '$' slutningen af linien
  10. '/' afslutningstegn skal være det samme første tegn
Læs lidt mere om regulære udtryk i Friheden til at vælge.

Prøv selv en rigtig og forkert dato:

Test: 1/2 2001

Dette er også en korrekt dato: xx 1 yy 2 zz 2001