2016-09-01 7 views
1

Ich brauche folgenden Beispiele von Eingaben zu ermöglichen:Regex für Komma Formatierung für Dezimalstellen und Punkt für Tausende

   n,nn 

      nn,nn 

      nnn,nn 

     n.nnn,nn 

     nn.nnn,nn 

     nnn.nnn,nn 

    n.nnn.nnn,nn 

    nn.nnn.nnn,nn 

    nnn.nnn.nnn,nn 

ich dies getan haben:

(^[0-9]{1,3}(\,[0-9]{1,2})?$) 

(^[0-9]{1,3}(\.[0-9]{3})(\,[0-9]{1,2})?$) 

(^[0-9]{1,3}(\.[0-9]{3})(\.[0-9]{3})(\,[0-9]{1,2})?$) 

und wenn eine dieser drei gefunden als ok, aber ich möchte stattdessen einen Regex machen.

+0

Sind Sie sicher, dass Sie 'nnn.nnnn, nn' haben? Sollte es nicht "nnn.nnn, nn" sein? –

+0

Sie haben Recht. Das tut mir leid. Mein Fehler. – SeaSide

Antwort

2

Sie eine Gruppe hinzufügen können (?:\.\d{3})* passen alle optionalen 3-stelligen Gruppierungen und * am Anfang hinzufügen beliebige Anzahl von Feldern (0 oder mehr) zu ermöglichen:

^ *\d{1,3}(?:\.\d{3})*(?:,\d{1,2})?$ 

Siehe regex demo

Wenn Sie auch wie 1234567,99 Zahlen übereinstimmen müssen, können Sie einen alternativen Zweig hinzu:

^ *(?:\d{1,3}(?:\.\d{3})*|\d+)(?:,\d{1,2})?$ 
^     ^^^^^ 

Siehe another regex demo

Auch wenn Sie meinen, dass es ein beliebiges Leerzeichen geben kann, ersetzen Sie den Literalraum durch ein \s Muster.

Wenn Ihre Regex-Engine \d nicht unterstützt, verwenden Sie stattdessen [0-9].

Einzelheiten:

  • ^ - Beginn der Zeichenfolge
  • * - keine oder mehr Leerzeichen (oder \s* - 0+ Whitespaces)
  • \d{1,3} - 1 bis 3 Ziffern
  • (?:\.\d{3})* - Null oder mehr Sequenzen von . + 3 Ziffern
  • (?:,\d{1,2})? - eine optionale Sequenz von:
    • , - ein Komma
    • \d{1,2} - 1 oder 2 Stellen
  • $ - Ende der Schnur.
+1

Das ist großartig. Vielen Dank. – SeaSide

1

Verwenden Sie '*', um keine oder mehrere Wiederholungen anzugeben, und '\ d', um eine Ziffer auszudrücken. Also:

^\d{1,3}(\.\d{1,3})*(\,\d{1,2})?$ 

sollte den Trick tun.

+1

Dies entspricht '1.222.333', was nicht sein sollte. – ClasG

+0

@ClasG Sollte es nicht? Vielleicht habe ich das Problem nicht richtig verstanden? Bitte erläutern Sie – RonyHe

+0

OP Versuche zeigen deutlich, dass es ',' nur als Dezimaltrennzeichen verwenden soll.Und falls vorhanden, sollte es nur 1 oder 2 Dezimalstellen zulassen. '(\, [0-9] {1,2})?' – ClasG

Verwandte Themen