Regex stimmt mit Zahlen und Dezimalzahlen überein

7

Ich brauche einen Regex-Ausdruck, der mit folgendem übereinstimmt:

%Vor%

aber NICHT

%Vor%

Ich habe das, was alle außer 0.5.5

zufriedenstellt %Vor%     
clestbest 06.06.2012, 19:43
quelle

5 Antworten

18

Dies ist eine ziemlich häufige Aufgabe. Der einfachste Weg, um damit umzugehen, ist dies:

%Vor%

Es gibt noch weitere Komplikationen, z. B. ob Sie führende Nullen oder Kommas oder ähnliches zulassen möchten. Dies kann so kompliziert sein, wie Sie es wünschen. Wenn Sie beispielsweise das Format 1.234.567.89 zulassen möchten, können Sie Folgendes verwenden:

%Vor%

Das \b gibt es einen Wortbruch, aber ich benutze es als eine hinterhältige Art, mindestens eine Ziffer am Ende der Zeichenfolge zu verlangen. Auf diese Weise wird eine leere Zeichenfolge oder ein einzelnes + nicht übereinstimmen.

Beachten Sie jedoch, dass Regexes nicht die ideale Methode zum Analysieren numerischer Zeichenfolgen sind. Alle modernen Programmiersprachen, die ich kenne, haben schnelle, einfache und integrierte Methoden dafür.

    
Justin Morgan 06.06.2012, 19:48
quelle
10

Niemand scheint negative Zahlen zu berücksichtigen. Einige erstellen auch eine Erfassungsgruppe, die unnötig ist. Dies ist die gründlichste Lösung IMO.

%Vor%

EDIT: Warum der Downvote?

    
Tyler Crompton 06.06.2012 19:50
quelle
3

Folgendes sollte funktionieren:

%Vor%

Dies verwendet ein negatives Lookahead, um sicherzustellen, dass weniger als zwei . -Zeichen in der Zeichenfolge vorhanden sind.

Ссылка

    
Andrew Clark 06.06.2012 19:48
quelle
2

Hier ist eine viel einfachere Lösung, die keine Vorausschau oder Look-Behinds verwendet:

%Vor%

Um zu verstehen, warum das funktioniert, lesen Sie es von rechts nach links:

  • Am Ende wird mindestens eine Ziffer benötigt.
    7 funktioniert
    77 funktioniert
    .77 funktioniert
    0.77 funktioniert
    0. funktioniert nicht
    leere Zeichenfolge funktioniert nicht
  • Eine einzelne Periode vor der Ziffer ist optional.
    .77 funktioniert
    77 funktioniert
    ..77 funktioniert nicht
  • Eine beliebige Anzahl von Ziffern vor dem (optionalen) Zeitraum. .77 funktioniert
    0.77 funktioniert
    0077.77 funktioniert
    0077 funktioniert

Die Verwendung von Look-ahead- und Look-Behind-Funktionen hat den zusätzlichen Vorteil, dass Sie sich keine Gedanken über regEx-basierte DOS-Angriffe machen müssen.

HTH

    
Spike Sagal 14.12.2016 17:24
quelle
1

Das könnte funktionieren:

%Vor%     
niko 06.06.2012 19:48
quelle

Tags und Links