Zahl mit Reg. Ausdruck prüfen
Jörg
- javascript
Hallo,
ich habe auf Grund eines älteren Beitrags dieses Forums folgende Prüfung eines Textfelds auf den Inhalt "Zahl" eingebaut. Leider lehnt die Routine sämtliche Eingaben als falsch ab (auch wenn nur eine Zahl eingegeben ist):
function checkZahl(feld){
checked = true;
Pruefe = new RegExp('/^\d*$/');
if(!Pruefe.test(feld.value)){
alert("Das ist keine gültige Zahl");
feld.select();
feld.style.backgroundColor = '#FFFF99';
checked = false;
}
return checked;
}
Gruß
Jörg
n'abend,
ich habe auf Grund eines älteren Beitrags dieses Forums folgende Prüfung eines Textfelds auf den Inhalt "Zahl" eingebaut. Leider lehnt die Routine sämtliche Eingaben als falsch ab (auch wenn nur eine Zahl eingegeben ist):
bist du sicher, dass die korrekte Funktion mit dem korrekten Feld als Argument aufgerufen wird? Bist du sicher, dass du nicht versehentlich eine veraltete Version deines Scripts im Cache hast?
hast du dir die Dokumentation zu RegExp angeschaut und vielleicht auch einen Blick auf die Funktion isNaN() geworfen?
function checkZahl(feld){
checked = true;
die Variable checked ist an dieser Stelle global. Das ist nicht nur Unschön, sondern kann Probleme verursachen.
var checked = true;
Pruefe = new RegExp('/^\d*$/');
Diese RegularExpression trifft dann zu, wenn das Feld leer ist, oder eine bestimmte Menge von Zahlen enthält. Hiermit werden aber nur Ganzzahlen erkannt. Wenn du nicht mit dem RegularExpression-Literal (/.*/) sondern auf die arbeitest, kannst du auf die Delimiter (in deinem Fall /) verzichten; var Pruefe = new RegExp('^\d*$');
sollte also reichen. Wenn du auf jeden Fall eine Zahl haben möchtest, ersetze den * durch ein +.
if(!Pruefe.test(feld.value)){
alert("Das ist keine gültige Zahl");
feld.select();
feld.style.backgroundColor = '#FFFF99';
checked = false;
}return checked;
}
Wann / Wo - also in welchem EventHandler - wird diese Funktion denn aufgerufen? onchange? onkeypress? onkeydown? onkeyup?
weiterhin schönen abend...
Hallo,
besten Dank für die ausführliche Erläuterung, die Funktion isNaN() war die Lösung. Die Prüffunktion wird übrigens mit onBlur() aufgerufen.
Gruß
Jörg
Hallo,
und vielleicht auch einen Blick auf die Funktion isNaN() geworfen?
isNaN will man in den seltensten Fällen und man sollte es nicht verwenden, wenn /^\d+$/ ausreicht.
Wenn du nicht mit dem RegularExpression-Literal (/.*/) sondern auf die arbeitest, kannst du auf die Delimiter (in deinem Fall /) verzichten
Er kann nicht, sondern muss, und das war auch der Fehler in seinem Code.
Mathias