barrierefreies Webdesign Ingo Turski

zum Inhalt

Ingo

Tips und Tricks:Weitere regEx-Prüfungen von Benutzereingaben

Programmiersprachen wie PHP und Javascript kennen »regular expressions«.
Mit solchen Ausdrücken können oft sehr einfach Benutzereingaben geprüft werden, wobei allerdings nicht zu strenge Maßstäbe angesetzt werden sollten, um dem Benutzer keine unnötigen Zwänge aufzubürden – auch wenn dadurch die Prüfung etwas aufwendiger wird.

Prüfung auf gültige Telefonnummer

Würde ich meine Telefonnummer mit „346008“ angeben, dann wäre sie ohne zusätzliche Ortsangabe bzw. Vorwahl nutzlos. Meine regEx prüft auf Einhaltung der verschiedenen Normen und maximalen Längen und erkennt auch „+49 211 346008“ oder „(0211) 346008“ sowie weitere mögliche Schreibweisen:

<?php
function tsCheckPhone($tel) {
  $Land = '((\+[0-9]{2,4}([ -][0-9]+?[ -]| ?\([0-9]+?\) ?))';
  $Ort = '|(\(0[0-9 ]+?\) ?)|(0[0-9]+? ?( |-|\/) ?))';
  $Nr = '([0-9]+?[ \/-]?)+?[0-9]';
  $regEx = '^'.$Land.$Ort.$Nr.'$';
  return preg_match("/$regEx/",$tel);
}
?>

<script type="text/javascript>
function tsCheckPhone(tel) {
  var regEx = /^((\+[0-9]{2,4}([ -][0-9]+?[ -]| ?\([0-9]+?\) ?))|(\(0[0-9 ]+?\) ?)|(0[0-9]+? ?( |-|\/) ?))([0-9]+?[ \/-]?)+?[0-9]$/;
  return tel.match(regEx);
}
</script>

Testen Sie das Suchmuster mittels Javascript:

Diese Prüfung erwartet eine abgetrennte Vorwahl. Wenn Sie auch durchgeschriebene Nummern wie „0211346008“ zulassen wollen, dann definieren Sie die Trennzeichen in $Ort als optional: ( |-|\/)?

Prüfung auf gültige Datumseingabe

Ein Datum kann nach verschiedenen Normen eingegeben werden. Man sollte nicht nur die DIN zulassen, sondern auch die ISO- und US-Norm. Meine regEx prüft auf Einhaltung dieser Normen und lässt auch Abweichungen zu, solange das Datum eindeutig ist:

<?php
function tsCheckDate($dat) {
  $DIN = '((0?[1-9]|[1-2][0-9]|3[0-1])\.((0?[1-9]|1[0-2])\.| ?[A-Za-z][a-zä][a-z]+\.? ?)(20)?[0-9]{2})';
  $ISO = '(20[0-9]{2}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]))';
  $US = '([a-zA-Z][a-z]{2,} ([1-9]|1[0-2]), ?(20)?[0-9]{2})';
  $regEx = '^('.$DIN.'|'.$ISO.'|'.$US.')$';
  return preg_match("/$regEx/",$dat);
}
?>

<script type="text/javascript>
function tsCheckDate(dat) {
  var regEx = /^(((0?[1-9]|[1-2][0-9]|3[0-1])\.((0?[1-9]|1[0-2])\.| ?[A-Za-z][a-zä][a-z]+\.? ?)(20)?[0-9]{2})|(20[0-9]{2}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]))|([a-zA-Z][a-z]{2,} ([1-9]|1[0-2]), ?(20)?[0-9]{2}))$/;
  return dat.match(regEx);
}
</script>

Testen Sie das Suchmuster mittels Javascript:

Diese Prüfung beschränkt sich auf Datumsangaben aus diesem Jahrhundert und die deutsche oder US-Schreibweise; das spanische „9 de septiembre de 2009“ z.B. würde beanstandet.