Zitat von Miranda
Beitrag anzeigen
Problem mit preg_match statt ereg nach PHP Umstellung
Einklappen
X
-
neue Frage zum Datum:
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?
Kommentar
-
Zitat von Miranda Beitrag anzeigenEndlosprogrammierungsabfrage (schönes Wort )
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.
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