JavaScript RegEx für Zahlen

SYS83

Mitglied
Hallo Leute,

Ich muss über JavaScript die Eingaben in einer Textbox auf gültige Zahlenformate überprüfen. Da gibt es ja diese Funktion match(). Diese nimmt ja auch RegEx -Audrücke an und ich hab mir gedacht, versuchst mal Ausdrücke für die Zahlen zusammen zu schustern.

Bevor ich die aber einbaue, wollte ich nen Profi fragen, ob die so richtig sind, da das hier meine ersten Gehversuche in Sachen RegEx sind. :)

Also hier meine Ausdrücke:
  • Ganzzahlen (auch negative) :
Code:
 /^-?[0123456789]+$/
  • Ganzzahlen (>0) :
Code:
 /^[0123456789]+$/
  • Kommazahlen (auch negative) :
Code:
^-?[0123456789]+[.,]{?}[0123456789]+$/
(hier soll deutsches und englisches Zahlenformat zulässig sein)
  • Kommazahlen (>0) :
Code:
^[0123456789]+[.,]{?}[0123456789]+$/


Stimmen die so? :D
 
Zuletzt bearbeitet:
Die Patterns kannst ganz schnell kürzer machen wobei bei Kommazahlen auch an die Zahlenformate gedacht werden muss eventuell früher oder später.

Also 1.000.000,32 zur besseren Übersicht würde ich also mit in die Überlegung einbeziehen.

weil so ne zahl 9434236,43 is doof zu lesen :p wenn man eine Ausgabe machen möchte oder die Eingabe aus einer db mit einbezieht wird wohl aber eher ein seltener Fall sein mit den Formaten.

zum 1. pattern das kannst gleich so schreiben

Code:
   /^-?\d+$/

2. wenn nur größer 0 sein soll

Code:
   /^[1-9]+$/  // >= 0 wäre dann eben [0-9]+ bzw gleich \d+

3.

Code:
    /^-?\d+(,|\.)\d+$/

4.

Code:
    /^\d+(,|\.)\d+$/g  // modifikator g für global das der nich anfängt mit einzelnen suchgruppen
                               //  sucht den Ausdruck als ganzes überall

Und je länger ich darüber nachdenke kann man eigentlich auch gleich komplett alles so schreiben so das alle 4 vereint sind. Natürlich wären dann Zahlen >= 0 mit dabei und eine strikte Trennung nich möglich wäre halt sehr allgemein dann.

Alle Zahlen egal ob negativ oder positiv und mit oder ohne Komma bzw Punkt.

Code:
    /^-?\d+(,|\.)?\d+/$

\d bewirkt quasi das der einzelne zeichen sucht speziell nur Zahlen
\D alles was keine Zahl ist
\w wäre auch sowas alle Buchstaben
\W alles was kein Buchstabe ist
. irgendein Zeichen egal was

Sowas wie [0123456789] kannst gleich so zusammen fassen in [0-9] is genau das gleiche bzw. \d oder eben zum Beispiel [12345] => [1-5]

Der Ausdruck hier (,|\.) ist eine Unterscheidung entweder kommt nun ein , oder ein . . Würde in dem Falle klappen bei der Suche nach meheren Zeichen in Folge welche gemischt wären dann eben.
Der slash muss vor den Punkt da der Punk ein spezielles RegExp zeichen ist und für ein beliebiges Zeichen steht.

Kürzer ist natürlich [,.] nach meinen Tests im Opera muss der Slash wohl nicht mehr vor dem Punkt stehen wenn man eine Suchgruppe angegeben hat , der scheint das dann automatisch zu konvertieren.

der 4. Ausdruck das {?} geht nicht , in den {} kann man angeben wie oft etwas vorkommt min oder maximal oder genau.

{1,} min 1 mal aber dann beliebig oft kannst auch gleich + sagen wie zum beispiel [12]+ min einmal eine 1 oder 2 aber dann beliebig oft.
{0,2} muss nicht vorkommen aber wenn dann maximal 2 mal in folge
{1,3} min einmal aber maximal 3 mal
{3} genau 3 mal

Zum Beispiel das einfach im Browser einfügen. da wirst alles finden was entweder keine punkte oder Kommas hat . Bzw maximal gemischt 5 Kommas / Punkte hintereinander.

Code:
     javascript:alert("-123,,...456".match(/^-?\d+[,.]{0,5}\d+$/g)); // matcht 
     javascript:alert("-123,,a..456".match(/^-?\d+[,.]{0,5}\d+$/g)); // matcht nicht mehr wegen dem a
     javascript:alert("-123,,a..456".match(/^-?\d+(,|.){0,5}\d+$/g)); // matcht nun wieder da ein Komma oder beliebiges zeichen
     javascript:alert("-123,,a..456".match(/^-?\d+(,|.){0,4}\d+$/g)); // matcht nicht mehr maximal 4 Zeichen
     javascript:alert("-123,,a..456".match(/^-?\d+(,|\.){0,5}\d+$/g)); // matcht nun nicht mehr

Eventuell geht es noch kürzer aber die haben bei mir nu erstmal geklappt :)

Und hier nochmal ein ausführliches Tut dazu wie ich finde

http://www.regular-expressions.info/tutorial.html

Kannst aber nicht 1 zu 1 in JavaScript ummünzen bei einigen Sachen wie zum beispiel den positive Lookbehind und negative Lookbehind das kennt javascript nicht. Den positive Lookahead und negative Lookahead aber schon.
 
Zuletzt bearbeitet:
Hallo FipsTheThief,

Sorry für meine späte Antwort, aber übers Wochende hatte ich keine Zeit online zu kommen.

Besten Dank für deine Erklärungen, das hilft mir schon ungemein weiter.

Also 1.000.000,32 zur besseren Übersicht würde ich also mit in die Überlegung einbeziehen.

weil so ne zahl 9434236,43 is doof zu lesen :p wenn man eine Ausgabe machen möchte oder die Eingabe aus einer db mit einbezieht wird wohl aber eher ein seltener Fall sein mit den Formaten.

Das brauch ich nicht. Es geht hier allein um die Eingabe von Zahlen in einem HTML-Formular. Die Übernahme in eine Datenbank und Ausgabe läuft in PHP (und da die Ausgabe natürlich mit Tausender formatiert und so). Die Lösung , Eingaben über Javascript abzufangen hat den Grund, dass vor dem eigentlichen Sumbit die Prüfung erfolgt und bei Fehler der Submit abgebrochen wird um unnötigen Netzverkehr zu verhindern.

Und je länger ich darüber nachdenke kann man eigentlich auch gleich komplett alles so schreiben so das alle 4 vereint sind. Natürlich wären dann Zahlen >= 0 mit dabei und eine strikte Trennung nich möglich wäre halt sehr allgemein dann.

Das habe ich mir anfangs auch gedacht, aber das ist für die im einzelnen erwarteten Zahlenformate dann wie mit Kanonen auf Spatzen geschossen oder führt dazu dass Gleitkommazahlen erlaubt werden wo nur reine Integer erwartet und erlaubt werden. Deswegen die Unterteilungen.

Also Dank Dir Nochmal, damit komm ich weiter.

Das Tutorial werd ich mir mal zu Gemüte führen, wenn mein Chef mir etwas Luft zum Schulen lässt. Aber erstmal muss das eingebaut werden und das Projekt fertig werden. :)

*Thema als erledigt markier*
 
Zurück