Zitat von Miranda
					
						
						
							
							
							
							
								
								
								
								
									Beitrag anzeigen
								
							
						
					
				
				
			
		Problem mit preg_match statt ereg nach PHP Umstellung
				
					Einklappen
				
			
		
	X
- 
	
	
	
		
	
	
		
		
		
		
		
		
		
	
	
  neue Frage zum Datum: neue Frage zum Datum:
 
 
 Soweit so gut.PHP-Code:$neudatum = '2013-04-12';
 
 if (preg_match('/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/', $neudatum))
 {
 echo 'Das Datumsformat wurde richtig eingegeben. '.$neues_datum;
 }
 else
 {
 echo 'Das Datumsformat ist ungültig. '.$neudatum;
 }
 
 
 Was aber, wenn ein ungültiges Datum eingegeben wird? Z.B. 2013-13-41
 Noch wird dies ja auch als richtige Eingabe gewertet.
 
 Wie kann man das abfangen? Ich bekomme es nur mit einer Endlosprogrammierungsabfrage (schönes Wort ) hin. Aber ich denke, das es einen ganz einfachen Weg gibt. ) hin. Aber ich denke, das es einen ganz einfachen Weg gibt.
 
 Stimmts?
 
 Könnt ihr mir hier auch weiterhelfen?
 Kommentar
- 
	
	
	
		
	
	
		
		
		
		
		
		
		
	
	
 Vielleicht nicht endlos, doch was hälst Du von etwas verschachteln?Zitat von Miranda Beitrag anzeigenEndlosprogrammierungsabfrage (schönes Wort ) )
 Gibt möglicherweise noch bessere Lösungen, doch wenn Du das noch von einer Funktion einrahmen würdest, sehe es auch schon brauchbar aus.PHP-Code:<?php
 $neudatum = '2013-12-31';
 
 if (preg_match('/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/', $neudatum, $aktuell)) {
 if ($aktuell[2] <= 12) {
 
 echo "Ich bin gleich oder kleiner als 12 Monate.<br>\n";
 
 if ($aktuell[3] <= 31) {
 
 echo "Ich bin gleich oder kleiner als 31 Tage.<br>\n".
 "Das Datumsformat wurde richtig eingegeben. ".$neudatum."<br>\n";
 }
 else {echo "Anzahl der Tage stimmt nicht.<br>\n";
 }
 }
 else {echo "Anzahl der Monate stimmt nicht.<br>\n";
 }
 }
 else {echo "Das Datumsformat ist ungültig. ".$neudatum."<br>\n";
 }
 ?>
 Kommentar
- 
	
	
	
		
	
	
		
		
		
		
		
		
		
	
	
  So ähnlich würde meine Lösung auch aussehen. So ähnlich würde meine Lösung auch aussehen.
 Das Problem hierbei sind die Tage. Nicht jeder Monat hat 31 Tage und am "schlimmsten" durch die Schaltjahre, der Februar.
 *lach* deshalb Endlosprogrammierung 
 
 Ich dachte daher, dass es eventuell eine Lösung gibt, in der die Eingabe z.B. mit dem Serverkalender abgeglichen werden kann, oder so ähnlich.
 Kommentar
- 
	
	
	
		
	
	
		
		
		
		
		
		
		
	
	
 Ja, das sollte mit cal_days_in_month kein Problem sein:
 
 PHP: cal_days_in_month - Manual
 
 Nur ich kenne nicht alle Funktionen, die es da irgendwo gibt.
 Es funktioniert zumindest:
 
 PHP-Code:<?php
 $neudatum = '2013-02-21';
 
 if (preg_match('/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/', $neudatum, $aktuell)) {
 if ($aktuell[2] <= 12) {
 
 echo "Ich bin gleich oder kleiner als 12 Monate.<br>\n";
 
 $tage = cal_days_in_month(CAL_GREGORIAN, $aktuell[2], $aktuell[1]);
 
 if ($aktuell[3] <= $tage) {
 
 echo "Ich bin gleich oder kleiner als ".$tage." Tage.<br>\n".
 "Das Datumsformat wurde richtig eingegeben. ".$neudatum."<br>\n";
 }
 else {echo "Anzahl der Tage stimmt nicht.<br>\n";
 }
 }
 else {echo "Anzahl der Monate stimmt nicht.<br>\n";
 }
 }
 else {echo "Das Datumsformat ist ungültig. ".$neudatum."<br>\n";
 }
 ?>Zuletzt geändert von Melewo; 13.04.2013, 19:56.
 Kommentar
- 
	
	
	
		
	
	
		
		
		
		
		
		
		
	
	
 Habe es noch ein bisschen angepasst, nun wird auch die 00 abgefangen 
 
 PHP-Code:$neudatum = '2012-02-01';
 
 if (preg_match('/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/', $neudatum, $aktuell))
 {
 if ($aktuell[2] <= 12 && $aktuell[2] >= 1)
 {
 echo 'Ich bin gleich oder kleiner als 12 Monate und gleich oder größer 1 Monat.<br />';
 $tage = cal_days_in_month(CAL_GREGORIAN, $aktuell[2], $aktuell[1]);
 if ($aktuell[3] <= $tage && $aktuell[3] >= 1)
 {
 echo 'Taganzahl ist existent!<br />';
 }
 else
 {
 echo 'Taganzahl zu hoch oder 00';
 }
 }
 else
 {
 echo 'Ich bin größer als 12 Monate oder 00';
 }
 }
 else
 {
 echo 'Das Datumsformat wurde falsch eingegeben!';
 }
 
 Kommentar
 
          

 
							
						
Kommentar