On Die, Jun 19, 2001 at 10:11:04 +0000, Florian Brunner wrote:
On 19.06.01, 22:25:05, Stefan Troeger
wrote: On Tue, Jun 19 2001 at 21:38 +0200, Jan Trippler wrote:
On Die, Jun 19, 2001 at 07:32:53 +0000, Florian Brunner wrote: [Ausschnitte aus Perl-FAQ]
if (/^-?(?:\d+(?:\.\d*)?|\.\d+)$/) { print "is a decimal
[...] Was ist der Unterschied in der Mustererkennung zu: /^[+-]?\d*[.,]?\d+$/ (von der Erkennung des Kommas abgesehen, die Vorzeichenerkennung habe ich einfach mal ergänzt)?
Der Regex aus der FAQ passt auch auf Zahlen, die mit einem Punkt enden (1.), ansonsten scheint da kein riesiger Unterschied zu sein.
Und vor allem auch auf Zahlen wie '.5', wenn ich den Ausdruck recht verstehe.
Das kann der von mir gepostete auch (\d* am Anfang sorgt dafür). Entscheidend ist der Umstand, dass sowohl 1. als auch .1 erfasst werden. Dann muss das Muster zwangsläufig komplexer aussehen.
Der Ausdruck besagt passt also auf alle Zahlen, die max. 1 Punkt und optional ein '-' als Vorzeichen haben.
Das ist nur die halbe Miete. Es muss mindestens eine Ziffer enthalten sein, das macht den Ausdruck so wüst ;-)
Beachte auch, dass '.' escaped werden muss ('.' ist ja ein Sonderzeichen in Regexp) (oder ist das bei eckigen Klammern anders - denke nicht?)
Denke doch - probiers aus.
Wie wärs z.B. mit folgendem Ausdruck: /^[\+-]?(?:\d+(?:[\.\,]\d*)?|[\.\,]\d+)$/ - muss ',' und '+' escaped werden? Wird wohl nicht schaden...
Das Entwerten macht den Ausdruck unübersichtlicher und ist in [] (bei den meisten Zeichen) unnötig. Also sollte es: /^[+-]?(?:\d+(?:[.,]\d*)?|[.,]\d+)$/ auch tun (ungetestet, ich bin müde ;-) Hier gibt es aber einen lästigen Effekt: Die Verwendung von . und , in der gleichen Zahl ist hier zulässig - was natürlich nicht im Sinne des Erfinders sein kann. Sowas sollte man vielleicht besser vorher abfangen oder aber den Dezimaltrenner per Variable übergeben. Jan