1Danke
ERLEDIGT
JA
JA
ANTWORTEN
2
2
ZUGRIFFE
4052
4052
EMPFEHLEN
-
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 :
1
/^-?[0123456789]+$/
- Ganzzahlen (>0) : Code :
1
/^[0123456789]+$/
- Kommazahlen (auch negative) : (hier soll deutsches und englisches Zahlenformat zulässig sein)Code :
1
^-?[0123456789]+[.,]{?}[0123456789]+$/ - Kommazahlen (>0) : Code :
1
^[0123456789]+[.,]{?}[0123456789]+$/
Stimmen die so?
Geändert von SYS83 (27.08.09 um 16:11 Uhr)
- Ganzzahlen (auch negative) :
-
28.08.09 13:24 #2
- Registriert seit
- Oct 2004
- Ort
- Leipzig
- Beiträge
- 589
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 :1
/^-?\d+$/
2. wenn nur größer 0 sein soll
Code :1
/^[1-9]+$/ // >= 0 wäre dann eben [0-9]+ bzw gleich \d+
3.
Code :1
/^-?\d+(,|\.)\d+$/
4.
Code :1 2
/^\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 :1
/^-?\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 :1 2 3 4 5
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.Geändert von FipsTheThief (28.08.09 um 14:23 Uhr)
-
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.
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.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 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.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.
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*
Ähnliche Themen
-
RegEx erlaubte Eingabe: Zahlen 2 bis 30
Von RalU im Forum Java GrundlagenAntworten: 3Letzter Beitrag: 12.03.10, 18:00 -
Regex Problem: Zahlen aus (33:22:11) extrahieren
Von Nord-Süd-Richtung im Forum PHPAntworten: 3Letzter Beitrag: 09.01.09, 07:06 -
String auf zahlen überprüfen und auslesen - Regex oder was anderes?
Von zoidberger im Forum C/C++Antworten: 0Letzter Beitrag: 10.04.08, 14:08 -
(RegEx) Pwd-Länge u. mind.2 Zahlen o. Buchstaben
Von Watusimann im Forum PHPAntworten: 5Letzter Beitrag: 13.07.07, 13:28 -
Mit regex Zahlen aus einem JTextfield filtern
Von Hayes im Forum JavaAntworten: 2Letzter Beitrag: 22.09.04, 15:55





Zitieren
Login





