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
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
2. wenn nur größer 0 sein soll
Code:
/^[1-9]+$/ // >= 0 wäre dann eben [0-9]+ bzw gleich \d+
3.
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.
\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.