Datumsgültigkeit
#1
geschrieben 10. Juli 2006 - 14:09
Ich habe folgendes problem:
ich baue eine auf php basierende Suche, mit einer Suchmöglichkeit nach Namen und Datum.
In der Mysql Datenbank werden die Daten in dem Format JJJJ.MM.DD (Jahr-Monat-Tag)
gespeichert.
Also wenn einer in mein Suchformular 23.08.2003 eingibt kann er keine ergebnisse bekommen!
Welche möglichkeit gibt es das Format des Datums zu prüfen, damit ich eine Fehlermeldung ausgeben kann?
Wenn es keine Mühe macht könnte mir jemand einen entsprechenden Codeschnipsel bauen?
thx; mfg valeron
Anzeige
#3
geschrieben 10. Juli 2006 - 14:46
Mein problem ist jetzt aber das ich ale Trennstelle zwischen Jahr-Monat-Tag einen Punkt und ein Minus erlauben will.
Mit diesem RegEx stelle ich zwar sicher das das Format stimmt, aber jetz habe ich das Problem mit den Trennzeichen.
Wo kann man einstellen das er - und . erlaubt?
Dazu habe ich nichts gefunden!
mfg valeron
Dieser Beitrag wurde von valeron bearbeitet: 10. Juli 2006 - 14:47
#4
geschrieben 10. Juli 2006 - 15:06
[1-3][0-9][0-9][0-9] (-|\.) [0-1][0-9] (-|\.) [0-3][0-9]
Damit überprüfst du, ob entweder ein Bindestrich oder ein Punkt verwendet wurde.
#5
geschrieben 10. Juli 2006 - 15:18
Dieser Beitrag wurde von Gitarremann bearbeitet: 10. Juli 2006 - 15:27
Der Optimist sagt: "Das Glas ist halb voll."
Der Realist sagt: "Bedienung, zwei Neue!"
#6
geschrieben 10. Juli 2006 - 16:11
Der RegEx geht nicht in das Script einzubauen.
Bsp.
<?php $regex = '[1-3][0-9][0-9][0-9](-|.)[0-1][0-9](-|.)[0-3][0-9]|[1-3][0-9][0-9][0-9]'; $test = "2009-08-23"; if(preg_match($regex, $test)) { echo"Gut"; } else { echo"schlecht"; } ?>
Das gibt mir immer eine Fehlermeldung, ist denn die Implementierung falsch?
Dieser Beitrag wurde von valeron bearbeitet: 10. Juli 2006 - 16:12
#7
geschrieben 10. Juli 2006 - 16:21
#8
geschrieben 10. Juli 2006 - 16:24
sry für die dumme Frage!!!
#9
geschrieben 10. Juli 2006 - 16:31
[0-9]{3} statt [0-9][0-9][0-9] schreiben.
Ja, mata ne!
(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
#10
geschrieben 10. Juli 2006 - 20:40
aber angenommen ich will auch die möglichkeit bieten,
das man nur eine Jahreszahl angibt wie z.B. 2003 :
dann könnte ich wieder [1-3][0-9][0-9][0-9] (oder die Rika version) nehmen _aber_ damit wird auch folgendes gematched:
23.02.2004 bin ich damit an den Grenzen vonRegex oder haben RegExes auch die möglichkeit festzulegen, das danach nichts mehr folgen darf?
habe http://www.chemie.fu-berlin.de/chemnet/use...perl-regex.html <- hier geschaut und einen solchen ausdruck nicht gefunden!
Dieser Beitrag wurde von valeron bearbeitet: 10. Juli 2006 - 20:41
#11
geschrieben 11. Juli 2006 - 08:13
lass Dir einfach nur die 4 letzten Zeichen des Strings ausgeben...
substr($datum,6,4);
Hier würde wenn $datum = "23.02.2004" ist "2004" ausgeben werden.
Die 6 gibt an, bei welchem Zeichen die Ausgabe beginnen soll (bei 0 beginnend) und die 4, wie lang die Ausgabe sein soll.
Gruß
Ivo
Dieser Beitrag wurde von noONE bearbeitet: 11. Juli 2006 - 08:20
#12
geschrieben 11. Juli 2006 - 08:44
Das hilft in dem Fall aber nicht weiter...
@valeron:
Der RegEx den du hast ist ja nur dazu gedacht um zu prüfen, ob die Eingabe korrekt ist.
Anstatt dann zu vergleichen, welches Daten in der Datenbank mit dem eingegebenen Datum übereinstimmen, scheinst du die Daten ebenfalls nur auf Gültigkeit zu überprüfen.
#13
geschrieben 11. Juli 2006 - 09:20
Dieser [1-3][0-9]{3}(-|.)[0-1][0-9](-|.)[0-3][0-9] RegEx erzwingt schonmal dass das Jahr zuerst steht,
aber ich brauche noch dass auch einfach nur das Jahr (z.B. 2003) als gültig angesehen wird,
dazu mache ich enfache einen | für die nächste möglichkeit und dann wieder [1-3][0-9]{3}
aber nun finde ich keinen RegEx befehl der festlegt das danach _garnichts_ folgen darf!
Dieser Beitrag wurde von valeron bearbeitet: 11. Juli 2006 - 10:31
#14
geschrieben 11. Juli 2006 - 12:41
Zitat
hinterdiesemstringmussschlusssein$
Ja, mata ne!
(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
#15
geschrieben 11. Juli 2006 - 13:47
2002.09.23 <-soll gültig sein
2002 <-soll gültig sein
29.03.2005 <-soll nicht gematched werden
Mein RegEx / [1-3] [0-9] {3} (-|.) [0-1] [0-9] (-|.) [0-3] [0-9] | [1-3][0-9]{3} $ /
Das Dollarzeichen kann aber nicht hinhauen da mit diesem RegEx das erste _und das dritte_ als gültig erklärt werden, wieder ein Fehler meinerseits oder stimmt das mit dem Dollar nicht?