Originally posted by Miranda
View Post
Problem mit preg_match statt ereg nach PHP Umstellung
Collapse
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?
Comment
-
Originally posted by Miranda View PostEndlosprogrammierungsabfrage (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";
}
?>
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, 18: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