Originally posted by Miranda
View Post
Problem mit preg_match statt ereg nach PHP Umstellung
Collapse
X
-
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.
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.
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