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