Regulärer Ausdruck Ziffernüberprüfung
Hendrik
- javascript
0 Don P0 Gunnar Bittersmann0 Don P
0 Hendrik0 Don P
0 Gunnar Bittersmann
Hey!
Ich möchte eine Funktion schreiben, die prüft, ob die übergebene Variable nur Ziffern und keine Buchstaben beinhaltet. Eigentlich vollkommen simpel, oder?! Allerdings komme ich mit regulären Ausdrücken noch nicht so wirklich klar. Bitte helft mir. Das war mein Ansatz:
function nummer (variable) {
var Ausdruck = /[0-9]/;
if (Ausdruck.exec(variable) == true) {
return true;
}
else return false;
}
Hendrik
Hallo,
function nummer (variable) {
return /^[\d]+$/.exec(variable);
}
^ = Anfang
[\d]+ = eine oder mehrere Ziffern (d für engl. digits)
$ = Ende
Das gibt ein Array oder null zurück. Wenn du true/false zurückgeben willst, dann so:
return /^[\d]+$/.exec(variable) ? true : false;
Die Variable ausdruck brauchst du eigentlich nicht. Da du den Ausdruck nur ein einziges mal verwendest. kannst du ihn auch direkt notieren.
Gruß, Don P
@@Don P:
Wenn du true/false zurückgeben willst, dann so:
Nö.
return /^[\d]+$/.exec(variable) ? true : false;
Die Variable ausdruck brauchst du eigentlich nicht.
Ebensowenig die Fallunterscheidung.
Live long and prosper,
Gunnar
Hallo,
@@Don P:
Wenn du true/false zurückgeben willst, dann so:
Nö.
Warum nö?
Falls das Script irgendwo zufällig mit if (nummer(variable)===true)...
abfragt (macht zwar wenig Sinn, aber man kann ja nie wissen wie umfangreich es ist und woher es stammt), funktioniert deine Version nicht mehr.
Gruß, Don P
Hey!
^ = Anfang
[\d]+ = eine oder mehrere Ziffern (d für engl. digits)
$ = Ende
Vielen Dank euch zwei. Sag ich ja, bin nicht fitt in regulären Ausdrücken, obwohl das nun wirklich ein sehr einfaches Beispiel war, oder?! Jetzt geht es, und auf 1 Zeile verkürzt, super!
Hendrik
Hallo,
Vielen Dank euch zwei. Sag ich ja, bin nicht fitt in regulären Ausdrücken, obwohl das nun wirklich ein sehr einfaches Beispiel war, oder?!
Ja, erfrischend einfach. Eigentlich brauchst du dafür auch die eckigen Klammern nicht. Die sind nur für Zeichenklassen, also wenn mehrere Zeichen gemeint sind wie in [0-9] oder ausführlicher in [0123456789].
/^\d+$/ tut's also auch.
Oder, wenn du Whitespace (Leerzeichen, Tabulatoren, Zeilenumbruch) am Anfang und/oder am Ende des Nummernstrings zulassen kannst, tut's auch
return !isNaN(variable) // ergibt true falls Nummer, sonst false
Gruß, Don P
@@Don P:
Oder, wenn du Whitespace (Leerzeichen, Tabulatoren, Zeilenumbruch) am Anfang und/oder am Ende des Nummernstrings zulassen kannst, tut's auch
return !isNaN(variable) // ergibt true falls Nummer, sonst false
Argl, das sollte sicher die erste Wahl vor der Anwendung eines regulären Ausdrucks sein.
BTW, http://de.selfhtml.org/javascript/objekte/unabhaengig.htm#is_nan@title=isNaN() lässt auch Vorzeichen zu. Und einmal [eE][+-]? innerhalb (fehlt in SELFHTML [TICKET436]).
Live long and prosper,
Gunnar
Hallo,
Oder, wenn du Whitespace (Leerzeichen, Tabulatoren, Zeilenumbruch) am Anfang und/oder am Ende des Nummernstrings zulassen kannst, tut's auch
return !isNaN(variable) // ergibt true falls Nummer, sonst false
ja, das gibt aber auch true, wenn beispielsweise ein führendes Plus- oder Minuszeichen im String vorkommt, oder wenn zwischen den Ziffern ein Punkt auftaucht, oder bei so lustigen Ausdrücken wie "0x1B4F" oder "6E-4". Die Bedingung "nur Ziffern" ist damit also nicht mehr erfüllt.
Ciao,
Martin
Hallo,
ja, das gibt aber auch true, wenn beispielsweise ein führendes Plus- oder Minuszeichen im String vorkommt, oder wenn zwischen den Ziffern ein Punkt auftaucht, oder bei so lustigen Ausdrücken wie "0x1B4F" oder "6E-4". Die Bedingung "nur Ziffern" ist damit also nicht mehr erfüllt.
Sogar für "0x1B4F"? Das wusste ich gar nicht, ist ja richtig mächtig, dieses isNaN(). Sehe gerade: Mit Number("0x1B4F") bekommt man sogar den Dezimalwert, bin beeindruckt.
@Gunnar:
Das sollte man bei Number() auch noch erwähnen. Der + Operator kann das übrigens auch:
+"0x1B4F" === Number("0x1B4F");
-"0x1B4F" === Number("-0x1B4F");
usw.
Ich glaube, die Operatoren + und - vor Strings arbeiten sogar *genau* wie Number().
Wisst du das im Ticket noch ergänzen oder müsste man dafür neue aufmachen? Ich kenne mich mit dem Ticket-System gar nicht aus. Darf da jeder mitmachen?
Gruß, Don P
@@Don P:
Ich glaube, die Operatoren + und - vor Strings arbeiten sogar *genau* wie Number().
Ob molily dir „ich glaube“ durchgehen lässt?
Ich kenne mich mit dem Ticket-System gar nicht aus. Darf da jeder mitmachen?
Na sicher. Dafür isses ja da.
Live long and prosper,
Gunnar
@@Hendrik:
function nummer (variable) {
var Ausdruck = /[0-9]/;
Schau nochmail in [http://de.selfhtml.org/javascript/objekte/regexp.htm@title=SELFHTML] nach, wie der Ausdruck lauten muss, wenn du nicht nur eine, sondern beliebig viele Ziffern erkennen willst. Hier noch passender: beliebig viele, aber mindestens eine.
if (Ausdruck.exec(variable) == true) {
return true;
}
else return false;
Was soll das? Dafür kannst du gleich schreiben:
return Ausdruck.exec(variable);
Und BTW, ich würde schreiben:
return variable.match(Ausdruck);
[</archiv/2008/3/t167751/#m1094554>]
Live long and prosper,
Gunnar