![]() |
RegEx dd.mm.yyyy hh:mm
Zitat:
Und zwar werkel ich im Moment ein ganz klein wenig mit regulären Ausdrücken/regular Expressions herum. Jetzt möchte ich eine Feld was Datum und Zeit enthält "validieren" (nennt man das so? :roll:). Allerdings haut mein Ausdruck nicht hin:
Code:
Akzeptiert auch "-" oder "/" als Delimiter, würde es denn funktionieren :stupid:
(((0[1-9]|[12]\d|3[01])[\/\.-](0[13578]|1[02])[\/\.-]((19|[2-9]\d)\d{2})\s(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]))|((0[1-9]|[12]\d|30)[\/\.-](0[13456789]|1[012])[\/\.-]((19|[2-9]\d)\d{2})\s(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]))|((0[1-9]|1\d|2[0-8])[\/\.-](02)[\/\.-]((19|[2-9]\d)\d{2})\s(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]))|((29)[\/\.-](02)[\/\.-]((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))\s(0[0-9]|1[0-9]|2[0-3]):([0-5][0-9])))
Kennt sich da jemand besser aus? Gruß, Lukas |
AW: RegEx dd.mm.yyyy hh:mm
Was funktioniert denn nicht?
Und was genau willst du denn validieren? Was ist mit Schaltjahren? Ist wohl besser das einfach in ein Datum+Uhrzeit umzuwandeln und zu schauen ob das funktioniert. |
AW: RegEx dd.mm.yyyy hh:mm
Was ist das? Der Regex Obfuscation Contest?
Also falls es ernst gemeint ist: Nimm dafür bitte nicht Regex. Regex ist zwar eine tolle Sache, aber es hat seine Grenzen. Das da oben versteht ja kein Mensch. Falls es eher sportlich gemeint ist: Versuch es doch mal mit ![]() |
AW: RegEx dd.mm.yyyy hh:mm
OK, Schaltjahr gefunden. :stupid:
Kann man dem RegEx nicht auch irgendwie sagen, daß es Leerzeichen im Vergleichscode ignorieren soll? Wenn ja, dann kann man es auch gleich formatiert lassen.
Code:
Fällt dir was auf?
(
( (0[1-9]|[12]\d|3[01]) [\/\.-] (0[13578]|1[02]) [\/\.-] ((19|[2-9]\d)\d{2}) \s (0[0-9]|1[0-9]|2[0-3]) : ([0-5][0-9]) : ([0-5][0-9]) )|( (0[1-9]|[12]\d|30) [\/\.-] (0[13456789]|1[012]) [\/\.-] ((19|[2-9]\d)\d{2}) \s (0[0-9]|1[0-9]|2[0-3]) : ([0-5][0-9]) : ([0-5][0-9]) )|( (0[1-9]|1\d|2[0-8]) [\/\.-] (02) [\/\.-] ((19|[2-9]\d)\d{2}) \s (0[0-9]|1[0-9]|2[0-3]) : ([0-5][0-9]) : ([0-5][0-9]) )|( (29) [\/\.-] (02) [\/\.-] ( (1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26]) | ((16|[2468][048]|[3579][26])00) ) \s (0[0-9]|1[0-9]|2[0-3]) : ([0-5][0-9]) ) ) Irgendwas stimmt im letzten Block mit der Uhrzeit nicht. :zwinker: Aber da der Teil in allen Oder-Blöcken identisch sein sollte, hätte es doch gereicht den Teil auch nur einmal auszuwerden. Würde den Code gleich mal stark kürzen, vorallem wenn man auch gleich mit alle unnötigen Klammern weglässt. Außer du willst auch die Sommer-/Winterzeit, sowie Schaltminuten und Schaltsekunden mit beachten. :stupid: ^ am Anfang und $ am Ende? Und innerhalb der [ ] sind "." und Co. keine Platzhalter, also ginge auch [/.-] |
AW: RegEx dd.mm.yyyy hh:mm
Zitat:
Zitat:
Zitat:
Code:
So haut das ganze hin und danke für die schöne formatierung und den Hinweiß. Sonst hätte ich noch ewig gerätselt.
(
( (0[1-9]|[12]\d|3[01]) [\/\.-] (0[13578]|1[02]) [\/\.-] ((19|[2-9]\d)\d{2}) \s (0[0-9]|1[0-9]|2[0-3]) : ([0-5][0-9]) )|( (0[1-9]|[12]\d|30) [\/\.-] (0[13456789]|1[012]) [\/\.-] ((19|[2-9]\d)\d{2}) \s (0[0-9]|1[0-9]|2[0-3]) : ([0-5][0-9]) )|( (0[1-9]|1\d|2[0-8]) [\/\.-] (02) [\/\.-] ((19|[2-9]\d)\d{2}) \s (0[0-9]|1[0-9]|2[0-3]) : ([0-5][0-9]) )|( (29) [\/\.-] (02) [\/\.-] ( (1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26]) | ((16|[2468][048]|[3579][26])00) ) \s (0[0-9]|1[0-9]|2[0-3]) : ([0-5][0-9]) ) ) Zitat:
Zitat:
Also ich bedanke mich, Problem gelöst 8-) Gruß, Lukas |
AW: RegEx dd.mm.yyyy hh:mm
Wie ein gültiges Datum sieht
Delphi-Quellcode:
aber nicht aus.
01/01-2000 00.00
Bist'e dir eigentlich sicher, daß das Jahr 8000 wirklich ein Schaltjahr wird?
Code:
^(
( ( (0[1-9]|[12]\d|3[01]) [/.-] (0[13578]|1[02]) [/.-] ((19|[2-9]\d)\d{2}) )|( (0[1-9]|[12]\d|30) [/.-] (0[13456789]|1[012]) [/.-] ((19|[2-9]\d)\d{2}) )|( (0[1-9]|1\d|2[0-8]) [/.-] (02) [/.-] ((19|[2-9]\d)\d{2}) )|( (29) [/.-] (02) [/.-] ( (1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26]) | ((16|[2468][048]|[3579][26])00) ) ) ) \s ([01]\d|2[0-3]) : ([0-5]\d) )$
Code:
^((0[1-9]|[12]\d|3[01])[/.-](0[13578]|1[02])[/.-](19|[2-9]\d)\d{2}
|(0[1-9]|[12]\d|30)[/.-](0[13456789]|1[012])[/.-](19|[2-9]\d)\d{2} |(0[1-9]|1\d|2[0-8])[/.-]02[/.-](19|[2-9]\d)\d{2} |29[/.-]02[/.-]((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|(16|[2468][048]|[3579][26])00)) \s([01]\d|2[0-3]):[0-5]\d$ |
AW: RegEx dd.mm.yyyy hh:mm
So ein Monster würde ich nur mit einem UnitTest in die Produktiv-Umgebung übernehmen, mit gaaaanz vielen negativ und vielen positiv Prüfungen.
Oder einfach ganz was anderes nehmen ... |
AW: RegEx dd.mm.yyyy hh:mm
TryStrToDateTime? :stupid:
Na ist doch aber immrerhin schonmal 18 Zeilen/Blöcke kürzer. So, und jetzt basteln wir uns einen eMail-Valiador, der alle möglichen RFCs abdeckt und alle (aktuell) bekannten TLD beachtet, sowie alle mehrteiligen TLDs ala xxx.de.co und inkl. Porno-/Spamfilter bekannter Mailadressen usw. |
AW: RegEx dd.mm.yyyy hh:mm
Ein email-Adress-Validator ist schon gut, aber wenn der auch noch nach Spam etc. schauen soll, dann macht der schon zuviel. Das muss man mehrstufig machen.
Delphi-Quellcode:
und der SpamFilter dann
TEmailAddress = record
private FValue : string; public // prüft den String mit IsValid und erzeugt den Record // bei IsValid = false wird eine Exception geworfen constructor Create( const AEmailAddressStr : string ); class operator implicit ( const s : string ) : TEmailAddress; class operator implicit ( const e : TEmailAddress ) : string; class function IsValid( const AStr : string ): Boolean; function ToString : string; // weitere Operatoren wie Equal oder Methoden wie IsEmpty end;
Delphi-Quellcode:
Die Funktion kann jetzt aufgerufen werden mit
function IsSpamEmail( const AEmailAddress : TEmailAddress ) : Boolean;
begin // hier Prüfung auf Spam-Domains end;
Delphi-Quellcode:
und der String wird in den Record umgewandelt und dabei gleichzeitig überprüft. Wenn das keine korrekte email-Adresse ist, dann wirft die Record-Umwandlung eine Exception. Darum kann ich mich in der Funktion darauf verlassen, dass ich nur korrekte Email-Adressen bekomme ;)
IsSpamEmail( 'foo@bar.com' )
Damit es nicht zu OT wird, das funktioniert natürlich auch für Datum, Zeit, etc. |
AW: RegEx dd.mm.yyyy hh:mm
Hmm, da ist was dran... Perfekt ist mein Ausdruck noch nicht :oops:
Allerdings geht es hier nicht um Delphi/Pascal ^^ Ich brauche das für eine PHP-Anwendung. Und RegEx schien mir bis jetzt die beste Lösung. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz