PHP überprüfen der korrekten Zeit format in $Wert
Habe ich ein online-Formular hat einige Felder mit der Zeit Daten. Ich Speichere diese Daten in die MySQL-Datenbank in eine time
Feld, welches auf einem format hh:mm:ss
. Wenn der Benutzer Eingaben der Zeiten in diesem format korrekt, dann möchte ich Daten annehmen. Ich möchte auch, um Benutzer an der Eingabe der Zeit in standard-US-Zeit, wie 9:30 am
oder 11:25 pm
oder 10:27 am
etc.
Grundsätzlich möchte ich testen, ob die Zeit ist, in der entsprechenden Datenbank-format first (hh:mm:ss
), dann, wenn es nicht, überprüfen, ob es in der zweiten akzeptierten format (hh:mm am/pm
), und wenn es ist, dann werde ich die PHP-Funktion strtotime()
konvertieren Sie Sie in das Datenbank-format für die Uhrzeit. Wenn es in keinem dieser Formate ist, dann werden wir eine Fehlermeldung angezeigt, und sterben.
Weiß jemand, wie um zu testen, ob der Wert einer Variablen mit einem von diesen Formaten?
Pseudo-PHP-code, was ich tun will:
<?php
$value = //some time;
if (is_database_time($value)){
//good no problem
}else if (is_usa_time($value)){
$value = strtotime($value);
}else{
die("error incorrect time format, try again.");
}
?>
** EDIT **
Danke an alle für die Hilfe. Ich habe einige der Infos hier, um eine Funktion, die perfekt funktioniert:
<?php
function filter_time($key,$value){
//this section handles the storage of time data
if (preg_match('/^(0?\d|1\d|2[0-3]):[0-5]\d:[0-5]\d$/', $value)){
//do nothing
}else if (preg_match('/^(0?\d|1[0-2]):[0-5]\d\s(am|pm)$/i', $value)){
$value = date( 'H:i:s', strtotime($value));
}else{
display_error('incorrect time format in '.$key.' field.');
}
return $value;
}
?>
- Warum sind Sie den Benutzer zwingen, geben Sie in einem bestimmten format? Sie sind bereits mit strtotime().
- Sie zu liefern haben, strtotime mit bestimmten format, nicht jedem beliebigen format zu arbeiten.
- Wie @PenguinCoder angegeben, strtotime() wird verstehen, gerade ungefähr jedem format, das der Benutzer eingibt. Warum nicht versuchen, die Umwandlung, und dem Benutzer zeigen, was das Ergebnis war, dass, wenn es irgendwelche Unsicherheiten?
- Danke für die Anregung, das ist ein Weg, es zu tun.
- Ich schlage vor, mit
date('H:i:s', strtotime($value))
sowohl gegen die richtigen Formate, um sicher zu sein, dass der Ausgang$value
hat führende null inhh
Teil. Siehe mein update gerade für eine Referenz. - Netter Zusatz, obwohl MySQL umgehen kann Zeit, die Daten ohne führende Nullen. Danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Funktion verify_time_format()
Gibt WAHR für folgende Werte:
Update:
Sind Sie bereits mit der
strtotime
von PHP, und für die Werte, die Sie angegeben, es gibt wirklich keine Notwendigkeit zu zwingen, ein bestimmtes format.Was würden Sie wahrscheinlich wollen, um zu testen und sicherzustellen, dass der Bereich überprüft, mit nur Ziffern, das Komma und am oder pm wie in Wh1T3h4Ck5 Antwort.
Mit, dass im Ort, würde der code wahrscheinlich ähnlich der folgenden
Aber eine elegantere Lösung wäre, zu schauen, mit Hilfe von Jquery/Javascript, BEVOR das Formular übermittelt wird. Sie können testen, und warnt den Anwender bei unsachgemäßer format vor dem Absenden an das PHP-Skript. Lassen Sie die Validierung im PHP-script aber auch mit anderen Schutzmaßnahmen, wenn erforderlich.
Können Sie einen regulären Ausdruck verwenden, um zu lösen das problem ziemlich leicht. Zum Beispiel:
00:00:05
(bacause von0[1-9]
Zustand)23:00:00
(weil keinehh
ab 2 zulässig ist),7:00:00
(weil es Kräfte, die führende null inhh
Teil). 2. Muster kann nicht mit0:34 am
(hh
kann nur 1-9),05:00 pm
(aus demselben Grund wie die vorigen Beispiel)11:59 PM
(nicht erlaubt in Großbuchstaben).