Thread Regex für Timestamp matcht nicht so wie gewünscht (25 answers)
Opened by GwenDragon at 2024-02-01 12:07

Linuxer
 2024-02-01 16:48
#195809 #195809
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
Wenn die Datenquelle "gesichert" ist und nur in diesem Format ankommen darf/kann (also beispielsweise nur aus den genannten Modulen kommt), würde ich es schlicht mit Ende-Anker lösen. Im Prinzip braucht man das ja immer, wenn man auf ganz bestimmte Formate prüfen will.

Die einfache Prüfung, ob $var eine Integer ist, braucht ja auch schon Anfangs- und Ende-Anker: m/^\d+$/
Ohne Anker bleibt zuviel offen:
m/^\d+/ => nur Ziffer(n) am Anfang, danach alles egal
m/\d+$/ => nur Ziffer(n) am Ende, davor alles egal
m/\d+/ => irgendwo mindestens eine Ziffer

Da bleibt einfach zu viel offen, wenn man nicht beide Anker setzt.
Ähnlich sehe ich es in Deinem Fall, nur das Du nicht auf "nackte Integer" prüfen willst, sondern im Prinzip eine Float mit einem Vorzeichen...

Auf Lookahead/-behind würde ich nach Möglichkeit verzichten.


Eine Variante im Regex könnte auch sein:

^(\D)?([.\d]+)$

Ja, damit wäre auch "1.2.3.4" ein gültiger String; aber je nach Anwendung würde ich das Risiko eingehen; eben beispielsweise weil ich weiß, woher die Daten kommen (eben aus den Perl-Modulen).
Wenn ich natürlich vorsichtiger sein will oder muss, dann eben mit dem optionalen Teil, wodurch es festgelegt wird, dass der Punkt nur einmal da sein darf, wenn er denn da ist.
Last edited: 2024-02-01 16:54:05 +0100 (CET)
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Regex für Timestamp matcht nicht so wie gewünscht