Mike_: Eingabe prüfen

hallo leute,

ich hab ein kontaktformular in php, in diesem werden vor dem absenden die eingaben geprüft. bei telefonnummer soll er aber noch prüfen ob auch nur zahlen oder ein - eingegeben wurde.

script:
if(trim($from_phone)=="") $err_text.="Bitte geben Sie Ihre Telefon-Nr. ein.<br>"; <-- hier wird geprüft ob überhaupt was eingegeben wurde.

else
if(hier müsste dann die abfrage nach zahlen oder minus kommen.
) $err_text.="Ihre Telefon-Nr. ist nicht korrekt, Zahlen oder -.<br>";

kann mir jemand helfen, oder weiss jemand ein tut ??

thx
mike

  1. hi mike!

    [telefonnummer pruefen]

    das stichwort hier lautet "regulaere ausdruecke" (ok, eigentlich sind's zwei worte).

    mit hilfe jener kannst du sehr bequem ueberpruefen, ob eine zeichenkette deine vorgaben erfuellt.
    anleitungen fuer regulaere ausdruecke (engl. regular expressions, kurz: regexp) findest du z.b. auf
    http://www.php.net/manual/en/reference.pcre.pattern.syntax.php
    http://www.perldoc.com/perl5.8.4/pod/perlrequick.html

    eine funktion dafuer in php ist z.b. preg_match()
    http://www.php.net/manual/en/function.preg-match.php

    if(preg_match("/\d+-?\d+/", $from_phone)){
       echo "passt";
    }else{
       echo "passt nicht";
    }

    prost
    seth

    1. thx,

      aber ich hab es ander gelöst:

      if(trim($from_phone)=="") $err_text.="Bitte geben Sie Ihre Telefon-Nr. ein.<br>"; <-- Hier wird generell geprüft auf einen Eintrag
      else
      if(ereg("[a-z_A-Z]",$from_phone)) $err_text.="Die Telefon-Nr. ist nicht korrekt.<br>"; <-- Hier wird geprüft ob auch Zahlen oder ein Minus eingegeben wurde

      Mike

      1. hallo Mike!

        ereg("[a-z_A-Z]",$from_phone)

        damit pruefst du nur, ob buchstaben oder unterstriche vorkommen. andere sonderzeichen, z.b. #$%& bleiben unberuecksichtigt.

        zudem sollte man anstelle von ereg besser preg_match verwenden. (zumindest verstehe ich so den hinweis auf http://www.php.net/manual/en/function.ereg.php).

        beser ist also imho
        if(preg_match("/^\d+-?\d+?/", $from_phone)){
           echo "passt";
        }else{
           echo "passt nicht";
        } // code leicht geaendert.

        $from_phone muss folgende eigenschaften haben, um zu passen:

        • mit einer zahl beginnen
        • danach duerfen beliebig viele ziffern folgen
        • ein - darf (muss aber nicht) enthalten sein
        • mit einer zahl enden

        prost
        seth

        1. Hallo seth,

          if(preg_match("/^\d+-?\d+?/", $from_phone)){

          mit dem Ausdruck gibt auch die Eingabe von '333-5873dd'; ein 'passt' - du musst den Ausdruck noch mit $ am Ende des Strings "verankern" (außerdem ist das zweite Fragezeichen überflüssig).

          Grüße aus Nürnberg
          Tobias

          1. hi!

            if(preg_match("/^\d+-?\d+?/", $from_phone)){
            du musst den Ausdruck noch mit $ am Ende des Strings "verankern" (außerdem ist das zweite Fragezeichen überflüssig).

            oops, das letzte fragezeichen sollte ein dollarzeichen sein, sorry.
            /^\d+-?\d+$/

            prost
            seth

      2. Hallo Mike,

        if(ereg("[a-z_A-Z]",$from_phone[...]<-- Hier wird geprüft ob auch Zahlen oder ein Minus eingegeben wurde

        nein, du prüfst hier ob in $from_phone mindestends ein Buchstabe oder ein Unterstrich enthalten sind. Außerdem verwendest du die langsameren ereg*-Funktionen - nimm besser die preg_*-Funktionen. Um eine Meldung auszugeben, wenn in einer Variablen etwas anderes als Zahlen und Minuszeichen enthalten sind, ist sowas imho sinnvoller:
          if(!preg_match('~[1]+$~',$var)){
            echo 'Die Telefonnummer darf nur aus Zahlen und dem Minuszeichen bestehen';
          }
        ich würde aber evtl. noch Schrägstriche, das Plus und Leerzeichen zu den erlaubten Zeichen hinzufügen.

        kurze Erläuterung zum regulären Ausdruck:
          ~      Begrenzer des regulären Ausdrucks
          ^      "verankert" den Ausdruck am Stringanfang
          [0-9-] Eine Zeichenklasse mit Zahlen und dem Minus
          +      mindestens ein Zeichen aus der Zeichenklasse vorher
          $      "verankert" den Ausdruck am Stringende
          ~      Begrenzer

        Grüße aus Nürnberg
        Tobias


        1. 0-9- ↩︎