Einfacher regulärer Ausdruck für eine Dezimalstelle mit einer Genauigkeit von 2


271

Was ist der reguläre Ausdruck für eine Dezimalstelle mit einer Genauigkeit von 2?

Gültige Beispiele :

123.12
2
56754
92929292929292.12
0.21
3.1

Ungültige Beispiele:

12.1232
2.23332
e666.76

Der Dezimalpunkt kann optional sein, und es können auch Ganzzahlen enthalten sein.


1
Verwandte: für Dezimalstellen mit tausendsten Trennzeichen, siehe stackoverflow.com/questions/16148034/…
Yeo

1
Die beste Antwort ist hier: stackoverflow.com/a/39399503/715269
Gangnus

Antworten:


397

Gültige Regex-Token variieren je nach Implementierung. Eine generische Form ist:

[0-9]+(\.[0-9][0-9]?)?

Kompakter:

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

Beide gehen davon aus, dass beide mindestens eine Ziffer vor und eine nach der Dezimalstelle haben.

Um zu erfordern, dass die gesamte Zeichenfolge eine Nummer dieses Formulars ist, setzen Sie den Ausdruck in Start- und End-Tags wie (in Perls Form):

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

Versuchen Sie Folgendes, um Zahlen ohne führende Ziffer vor der Dezimalstelle ( .12) und ganze Zahlen mit einer nachgestellten Periode ( 12.) abzugleichen, ohne die Eingabe einer einzelnen Periode ( .) auszuschließen :

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

Hinzugefügt

Wickelte den Bruchteil ein ()?, um ihn optional zu machen. Beachten Sie, dass dies Formulare wie das 12. Einschließen ausschließt, die eher so aussehen würden ^\d+\\.?\d{0,2}$.

Hinzugefügt

Verwenden Sie ^\d{1,6}(\.\d{1,2})?$diese Option , um die Wiederholung zu stoppen und den gesamten Teil des Dezimalwerts einzuschränken.


4
Mathematisch denke ich, dass eine Präzisionszahl 2 immer zwei Dezimalstellen haben sollte, selbst wenn die letzte Null ist. Dies basiert auf meiner Erfahrung mit signifikanten Zahlen, so dass es falsch sein könnte, aber Sie wissen nicht wirklich, ob 1,7 1,70 oder eine Zahl von 1,70 bis 1,74 ist.
Paxdiablo

Vielen Dank! War genau das, was ich brauchte :) 1
alex

6
Dies entspricht 0001.00: /
Redben

2
Hinzugefügt '-?' in diesem ^ \ d + (\. \ d {1,2})? $ ===> ^ -? \ d + (\. \ d {1,2})? $ für die Unterstützung von -ve
Murali Murugesan

1
@BimalDas, Sie können Negative unterstützen, indem Sie dem Ausdruck -?wie in voranstellen -?\d+(\.\d{1,2})?. Ich habe keine Negative aufgenommen oder mit einem Dezimalpunkt begonnen, da diese nicht in der Frage des OP standen, obwohl sie sicherlich für ein allgemeineres Zahlenformat gelten. Der Kommentarthread hier bietet einige Möglichkeiten, mit ".21" umzugehen.
DocMax

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

Und da reguläre Ausdrücke schrecklich zu lesen und noch weniger zu verstehen sind, ist hier das ausführliche Äquivalent:

^                         # Start of string
 [0-9]+                   # Require one or more numbers
       (                  # Begin optional group
        \.                # Point must be escaped or it is treated as "any character"
          [0-9]{1,2}      # One or two numbers
                    )?    # End group--signify that it's optional with "?"
                      $   # End of string

Sie können in den meisten Implementierungen [0-9]mit \dregulären Ausdrücken (einschließlich PCRE , der am häufigsten verwendeten) ersetzen . Ich habe es so belassen, wie [0-9]ich denke, dass es einfacher zu lesen ist.

Hier ist auch das einfache Python-Skript, mit dem ich es überprüft habe:

import re
deci_num_checker = re.compile(r"""^[0-9]+(\.[0-9]{1,2})?$""")

valid = ["123.12", "2", "56754", "92929292929292.12", "0.21", "3.1"]
invalid = ["12.1232", "2.23332", "e666.76"]

assert len([deci_num_checker.match(x) != None for x in valid]) == len(valid)
assert [deci_num_checker.match(x) == None for x in invalid].count(False) == 0

Ich möchte maximal 3 Stellen vor der Dezimalstelle, habe es ohne Glück versucht ^ ([0-9] {0,3}) + (\. [0-9] {1,2})? $
Raghurocks

3
@ Raghurocks Entfernen Sie die +nach dem ersten schließenden Paren,^([0-9]{0,3})(\.[0-9]{1,2})?$
dbr

Für Java-Benutzer: Die Dezimalstelle sollte nicht maskiert werden.

3
@Gracchus Bist du sicher? Es sollte wahrscheinlich \\.statt sein, \.weil .es so aussieht, als würde es funktionieren, aber mit jedem Zeichen übereinstimmt (nicht nur mit der Dezimalstelle). Zum Beispiel kann sowohl 1z23und 1.23könnte als gültig angesehen , wenn Sie es nicht entkommen
dbr

@dbr Vielleicht sollte es so sein. Java hat sich nur über unsachgemäße Flucht beschwert. Entfernen Sie das "reparierte es" (halt die Klappe), lol. Ich hatte noch keine Gelegenheit, es vollständig zu testen.

20

Um ein optionales Minuszeichen einzufügen und Zahlen wie 015(die mit Oktalzahlen verwechselt werden können) nicht zuzulassen, schreiben Sie:

-?(0|([1-9]\d*))(\.\d+)?

Dies erlaubt mir Alpha vor der Dezimalstelle. Erlaubt X.25
BengalTigger

1
Dies begrenzt die Anzahl der Dezimalstellen nicht auf 2.
Dawood ibn Kareem

13

Für Zahlen ohne Tausendertrennzeichen mag ich diesen einfachen, kompakten regulären Ausdruck:

\d+(\.\d{2})?|\.\d{2}

oder, um nicht auf eine Genauigkeit von 2 beschränkt zu sein:

\d+(\.\d*)?|\.\d+

Letztere Streichhölzer
1
100
100
100,74
100,7
0,7
0,7
0,72

Und es stimmt nicht mit einer leeren Zeichenfolge überein (wie \ d *.? \ D * würde)


7

Ich benutze diese für bis zu zwei Dezimalstellen:
(^(\+|\-)(0|([1-9][0-9]*))(\.[0-9]{1,2})?$)|(^(0{0,1}|([1-9][0-9]*))(\.[0-9]{1,2})?$) passiert:
0,25
0,25
10,25
+0,25

nicht passieren:
± 25
01.25
1.
1,256


Dies übergibt auch einen leeren Wert.
BengalTigger

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

Wird Dinge wie 12.akzeptiert machen. Dies wird nicht allgemein akzeptiert, aber wenn Sie „flexibel“ sein müssen, ist dies ein Weg. Und natürlich [0-9]kann durch ersetzt werden \d, aber ich denke, es ist auf diese Weise besser lesbar.


5

Versuche dies

 (\\+|-)?([0-9]+(\\.[0-9]+))

Es werden auch positive und negative Vorzeichen zugelassen.


3

Haupt Antwort ist falsch , weil es Valids 5.oder 5,Eingänge

Dieser Code behandelt es (aber in meinem Beispiel sind negative Zahlen verboten):

/^[0-9]+([.,][0-9]{1,2})?$/;

Ergebnisse sind unten:

true => "0" / true => "0,00" / true => "0,0" / true => "0,00" / true => "0,0" / true => "1,2" true => "1.1" / true => "1" / true => "100" true => "100.00" / true => "100.0" / true => "1.11" / true => "1,11" / false => "-5" / false => "-0,00" / true => "101" / false => "0,00,0" / true => "0,000" / true => "000,25" / false => ".25" / true => "100.01" / true => "100.2" / true => "00" / false => "5." / false => "6" / true => "82" / true => "81,3" / true => "



2

Im Allgemeinen dh unbegrenzte Dezimalstellen:

^-?(([1-9]\d*)|0)(.0*[1-9](0*[1-9])*)?$.


1

Wird nicht müssen Sie das nehmen ein e666.76Rechnung?

Mit

(e|0-9)\d*\d.\d{1,2)

Nein, das würde den Rahmen des Projekts sprengen! danke aber, es ist praktisch :)
user39221

1

Wenn ich auch meine Antwort hinzufüge, könnte jemand sie nützlich finden oder auch meine richtig sein.

function getInteger(int){
  var regx = /^[-+]?[\d.]+$/g;
  return regx.test(int);
}


alert(getInteger('-11.11'));

1

Das hat bei mir funktioniert:

(-?[0-9]+(\.[0-9]+)?)

Gruppe 1 ist Ihre Float-Nummer und Gruppe 2 ist nur der Bruch.


1

Ich habe es mit meinem Projekt versucht. Dies ermöglicht auch Zahlen mit + | -Vorzeichen.

/^(\+|-)?[0-9]{0,}((\.){1}[0-9]{1,}){0,1}$/

0

Chrome 56 akzeptiert diese Art von Mustern nicht (Chrome 56 erhält 11.11. Eine zusätzliche.) Mit Typennummer. Verwenden Sie Typ als Text als Fortschritt.


0

Dies ermöglicht eine Dezimalstelle mit Exponentiation und bis zu 2 Stellen.

^[+-]?\d+(\.\d{2}([eE](-[1-9]([0-9]*)?|[+]?\d+))?)?$

Demo


Das passt weder zur ganzen Zahl noch1.2e-10
Toto

Ja, danke für deine Korrektur. Ich dachte, es ist nur für Dezimalzahlen
Nambi_0915

([0-9]+)?ist besser geschrieben \d*. Jetzt passt es nicht zusammen 10e3. Und OP möchte mit bis zu 2 Ziffern übereinstimmen.
Toto

-1
 function DecimalNumberValidation() {
        var amounttext = ;
            if (!(/^[-+]?\d*\.?\d*$/.test(document.getElementById('txtRemittanceNumber').value))){
            alert('Please enter only numbers into amount textbox.')
            }
            else
            {
            alert('Right Number');
            }
    }

Die Funktion überprüft jede Dezimalzahl. Die Wetternummer hat Dezimalstellen oder nicht. Andernfalls wird "Richtige Nummer" angezeigt. "Bitte geben Sie nur Zahlen in das Textfeld" Betrag "ein. Warnmeldung wird angezeigt.

Vielen Dank... :)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.