Originally posted by Miranda
					
						
						
							
							
							
							
								
								
								
								
									View Post
								
							
						
					
				
				
			
		Problem mit preg_match statt ereg nach PHP Umstellung
				
					Collapse
				
			
		
	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?
 Comment
- 
	
	
	
		
	
	
		
		
		
		
		
		
		
	
	
 Vielleicht nicht endlos, doch was hälst Du von etwas verschachteln?Originally posted by Miranda View PostEndlosprogrammierungsabfrage (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";
 }
 ?>
 Comment
- 
	
	
	
		
	
	
		
		
		
		
		
		
		
	
	
  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.
 Comment
- 
	
	
	
		
	
	
		
		
		
		
		
		
		
	
	
 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";
 }
 ?>Last edited by Melewo; 13-04-2013, 19:56.
 Comment
- 
	
	
	
		
	
	
		
		
		
		
		
		
		
	
	
 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!';
 }
 
 Comment
 
          

 
							
						
Comment