Ich habe ein Datum (zB. JJJJ-MM-TT hh: mm: ss) und ich möchte in der Lage sein, wahr zurückzugeben, wenn wir eine Zeichenfolge haben, die diesem Muster entspricht, oder das teilweise mit diesem Muster übereinstimmt, vom Anfang bis zum Ende. z.B. 44
würde mit dem Muster übereinstimmen, da 44
mit dem JJ übereinstimmen würde, aber -12
würde nicht übereinstimmen, da kein gültiges "y" -Zeichen ist.passend zu einem Teil einer Zeichenfolge von Anfang an
Ein paar unelegante Lösungen kommen mir vor. Ich konnte preg_match
auf so etwas tun:
#^\d(\d(\d(\d(-)?)?)?)?$#
Das ist nur eine teilweise Übereinstimmung auf das Jahr durchführt. Es müßte für die Monat zu berücksichtigen, Tag, Stunde, Minute erweitert geführt werden, usw., aber das sollte Idee # zeigt 1.
ich auch etwas tun könnte, wie ...
$patterns = [
'',
'\d',
'\d\d',
'\d\d\d',
'\d\d\d\d',
'\d\d\d\d-',
...
];
isset($patterns[strlen($str)] && preg_match('#^' . $patterns[strlen($str)] . '$#', $str)
Aber auch das scheint gewunden zu sein.
Ich könnte auch dies tun:
switch (strlen($str)) {
case 1: return preg_match('#^\d$#', $str);
case 2: return preg_match('#^\d\d$#', $str);
case 3: return preg_match('#^\d\d\d$#', $str);
case 4: return preg_match('#^\d\d\d\d$#', $str);
case 5: return preg_match('#^\d\d\d\d-$#', $str);
...
}
aber das scheint auch aufgebläht.
Mit anderen Worten, ich bin auf der Suche nach einer Funktion, für die 2005-
True zurückgegeben wird, wie auch 2
und 2005-1
. Aber -2005
wird false zurückgeben, ebenso wie oder neubert
.
Ich möchte in der Lage sein, gültige Werte in eine SQL-Abfrage zu übergeben. z.B. WHERE date_column LIKE '$str%'
. Wenn date_column
ein DATETIME ist, dann ist die Suche nach -12-
Zeitverschwendung, weil date_column
das nicht als Wert haben kann.
Irgendwelche Ideen?
Ich bin mit '^' und '' $ in meinem Muster. Meine erste und die zweite im 'preg_match'-Call. Das '$ patterns'-Array wird zwischen' #^'und' $ # 'verkettet. – neubert
Welche Werte sind optional? Vielleicht '^ \ d {4} - \ d {2} - \ d {2} \ d {2}: \ d {2}: \ d {2} $'? Du könntest die '\ d's als erlaubte Bereiche erweitern, aber dann wird das schwer zu lesen sein. – chris85
Können Sie einige gültige und ungültige Eingaben für obige Muster hinzufügen? – anubhava