2017-01-25 4 views
0

ich zwei Regexp die geschrieben haben, die für die folgenden Formate erlauben:Regexp - optional Punkt in einer Dezimalzahl

  • X
  • X.
  • XY

Wo kann Y sein 1 oder 2 Ziffern. Und X ist unbegrenzt.

Regex1: ^\d+(?:\.{0,1})(?:\d{1,2})?$

Regex2: ^\d+\.{0,1}(?:\d{1,2})?$

Ist man besser als die anderen?

Gibt es eine bessere Möglichkeit, dies zu schreiben?

Auch, warum nicht diese eine Arbeit, wo der Punkt nur als optional festgelegt ist: ^\d+(?:\.)(?:\d{1,2})?$

Dank.

Antwort

2

Der Grund ^\d+(?:\.)(?:\d{1,2})?$ nicht der Fall funktioniert, dass es funktioniert nicht das machen. optional wie du sagst. Die (?: ... ) ist nicht, wie Sie etwas optional machen; seine hauptsächliche Verwendung ist das Gruppieren mehrerer Dinge zusammen (so dass ein nachfolgender ?, '+' usw. die Gruppe modifizieren könnte), ohne einen Erfassungswert zu erzeugen.

Machen Sie etwas optional, indem Sie es mit einem ? folgen. Also:

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

sollte funktionieren. Es ist einfacher - also imo vorzuziehen - zu einer der anderen Optionen, die Sie gezeigt haben. Einfacher noch:

^\d+\.?\d{0,2}$ 

sollte in Ordnung sein.

+0

@ fractal5 \ d wird beispielsweise 0001 erlauben, also können Sie folgendes verwenden:'^([1-9] [0-9] *)? [0-9].? \ d { 0,2} '(oder etwas ähnliches) – fharreau

+0

@ fractal5 - Vielleicht hast du das als Kommentar zu der Frage gedacht? Weil als Kommentar zu meiner Antwort - da meine Antwort auf den in der Frage formulierten Anforderungen beruht, die nicht aussagen, dass führende Nullen ausgeschlossen werden sollten - ist es falsch. –

+0

Bekam es. Ja, ich habe gerade gemerkt, dass das? nach dem) macht es optional. Danke für die einfache Lösung. – fractal5

2

Gibt es eine bessere Möglichkeit, dies zu schreiben?

können Sie diese Regex ohne Gruppen verwenden:

^\d+\.?\d{0,2}$ 

RegEx Demo

\d{0,2} ermöglicht Abwesenheit von irgendwelchen Stellen nach Zeit. Beachten Sie auch, dass \.{0,1} gleiche wie \.?

+0

@ fractal5 \ d erlaubt 0001 zum Beispiel, also möchten Sie vielleicht verwenden: '^ ([1-9] [0-9] *)? [0-9].? \ D {0,2} '(oder etwas Ähnliches) – fharreau

Verwandte Themen