:-): Geburtsdatum Gültigkeitsüberprüfung

Hallo.

Beim Registrieren für mein kleines Projekt muss ich das Geburtsdatum überprüfen (wegen USK). Das mach ich mit folgendem Code:

  
function gebdat_valid($gebdat){  
 //Datum aufteilen  
 $gebdat_array=explode("-",$gebdat);  
  
 $alph=array("A","a","B","b","C","c","D","d","E","e","F","f","G","g","H","h","I","i","J","j","K","k","L","l","M","m","N","n","O","o","P","p","Q","q","R","r","S","s","T","t","U","u","V","v","W","w","X","x","Y","y","Z","z","Ä","ä","Ö","ö","Ü","ü","ß");  
  
 //Vorkommen prüfen  
 for($x=0;$x<count($alph);$x++){  
  if(in_array($alph[$x],$gebdat_array)) die("Verbotenes Zeichen im Geburtsdatum");  
 }  
  
  
}  

Doch der Code greift nicht, egal was für Zeichen ich der Funktion übergebe.

Könnt ihr mir helfen, die Funktion richtig zu schreiben?

Danke euch
:-)

  1. Moin!

    Beim Registrieren für mein kleines Projekt muss ich das Geburtsdatum überprüfen (wegen USK).

    Wenn es wirklich um Jugendschutzfragen geht, reicht die simple Angabe des Benutzers, wie alt er denn ist, sowieso nicht aus.

    function gebdat_valid($gebdat){
    //Datum aufteilen
    $gebdat_array=explode("-",$gebdat);

    $alph=array("A","a","B","b","C","c","D","d","E","e","F","f","G","g","H","h","I","i","J","j","K","k","L","l","M","m","N","n","O","o","P","p","Q","q","R","r","S","s","T","t","U","u","V","v","W","w","X","x","Y","y","Z","z","Ä","ä","Ö","ö","Ü","ü","ß");

    //Vorkommen prüfen
    for($x=0;$x<count($alph);$x++){
      if(in_array($alph[$x],$gebdat_array)) die("Verbotenes Zeichen im Geburtsdatum");
    }
    }

      
    Beschäftige dich mit regulären Ausdrücken.  
      
    Du wirst dich mutmaßlich auf ein festes Datumsformat festlegen müssen, also beispielsweise DD.MM.YYYY. Dieses Format in einen regulären Ausdruck zu übersetzen, ist für Anfänger bestens geeignet.  
      
    Zum Nachlesen:  
    <http://de.php.net/preg_match>  
    <http://www.php.net/manual/de/reference.pcre.pattern.syntax.php>  
      
     - Sven Rautenberg
    
    -- 
    My sssignature, my preciousssss!
    
    1. Hi

      Beschäftige dich mit regulären Ausdrücken.

      Oh, das habe ich schon mal. Mit mäßigem Erfolg... Ich hab mir die Links durchgelesen und mir zur Gemüte geführt.
      Aber folgender RegEx funktioniert nicht, obwohl er es sollte (nach Augenmaß):

        
       if(!preg_match("/[0-9]{4}-[0-9]{2}-[0-9]{2}/",$gebdat)) return false;  
      
      

      Muss evtl der Bindestrich maskiert werden?
      Ich muss dazu sagen, dass das Datum im Format JJJJ-MM-TT übertragen wird...

      Du wirst dich mutmaßlich auf ein festes Datumsformat festlegen müssen, also beispielsweise DD.MM.YYYY. Dieses Format in einen regulären Ausdruck zu übersetzen, ist für Anfänger bestens geeignet.

      Dann bin ich ja noch weniger als ein Anfänger, wenn selber der obere Code nicht will... *schäm*

      Danke
      :-)

      1. Moin!

        Oh, das habe ich schon mal. Mit mäßigem Erfolg... Ich hab mir die Links durchgelesen und mir zur Gemüte geführt.
        Aber folgender RegEx funktioniert nicht, obwohl er es sollte (nach Augenmaß):

        if(!preg_match("/[0-9]{4}-[0-9]{2}-[0-9]{2}/",$gebdat)) return false;

        
        >   
        > Muss evtl der Bindestrich maskiert werden?  
        > Ich muss dazu sagen, dass das Datum im Format JJJJ-MM-TT übertragen wird...  
          
        Du solltest das Problem isolieren - also eine eigene kleine PHP-Datei machen, die nur den RegEx ausführt und manuell mit Strings bestückt wird:  
          
        ~~~php
          
        $gebdat = "2005-02-16";  
          
        if (preg_match("/[0-9]{4}-[0-9]{2}-[0-9]{2}/",$gebdat))  
        {  
          echo "Gefunden";  
        }  
        else  
        {  
          echo "Nicht gefunden";  
        }  
        
        

        Probiere als Werte für $gebdat unter anderem:
        "abcdefghij"
        "1000-13-40"
        "abc1999-01-01"
        "2000-10-01-01"

        - Sven Rautenberg

        --
        My sssignature, my preciousssss!