Test einer Zeichenkette

anmae

Erfahrenes Mitglied
Hallo,

ich möchte bei einem Textfeld testen ob nur Zahlen eingegeben werden. dafür habe ich in der OnChange methode des Feldes eine Funktion mit this.value aufgerufen.
Die Value darf nur aus einzelnen ziffern und nur Zahlen von 0 bis 100 enthalten.

Wie teste ich am besten ob die Value eine Zahl ist?


thx
der andres
 
Also, da gibt es mehrere Möglichkeiten:
  • Du befasst dich mit regulären Ausdrücken in JS. Dazu bietet sich die Methode match() des String-Objekts an. Dein Regex ist in diesem Fall ja sicherlich recht simpel (ich hoffe, meiner ist nicht allzu fehlerhaft :-) ):
Code:
/^([0-9]{1,2})|100$/
  • Ansonsten stellt JS dir isNaN() zur Prüfung, ob es sich um eine Zahl handelt zur Verfügung (isNotaNumber ausgesprochen). Möchtest du darauf prüfen, ob es sich um eine Zahl handelt, muss der Rückgabewert false sein.
 
Danke erstmal, genau sowas hab ich gesucht.

nun allerdings noch nen paar newbieprobleme:

Er meckert wegen "Objekt erwartet" in der Zeile mit dem ersten if.
Ich seh da einfach den fehler nich.
Code:
<script language='javascript'>
	var oldVal="";
	function testInput(value){

		if(isNAN(value)==0)
			if( value.match("/^([0-9]{1,2})|100$/")){
				oldVal=value;
				return(0);
			}
		document.getElementById("Text").value = oldVal;
	}
</script>
 
Hallo,

du hast da vielleicht etwas falsch verstanden: meine zwei Vorschläge waren als Alternativen gedacht, wobei der Regex mit einem einzigen Ausdruck den zweck wohl einfacher erfüllt, als wenn man über mehrere Prüfungen und Vergleiche mit Operatoren die Korrektheit des Eingabewerts überprüft.
Kurz: Wenn du den Regex benutzt, brauchst du isNan() nicht.

Aber zurück zu deinem Code:
isNaN(value) muss es heißen, denn Javascript achtet auf GROß/kleinschreibung ;) . Als Rückgabe erhältst du eigentlich einen boolschen Wert (true oder false), keine Integerzahl 1 oder 0. Wenn dir die Arbeit mit dem Regex zu kompliziert ist, musst du danach noch prüfen, ob (value>=0 and value<=100) erfüllt ist.
Außerdem weiß ich nicht, ob deine Logik so ganz mit deinen Vorstellungen übereinstimmt: Zuerst prüfst du mit isNan() auf den Wert 0 ~=false, wenn die Eingabe aber korrekt dem Regex entspricht, brichst du die Funktion mit return ab... Ist das so gewollt?
 
uups, danke

ja die logik is so in ordnung. Wenn es ne zahl ist dann speicher ich die zahl und beende, ansonsten ersetze ich sie durch die vorher gespeicherte Zahl.
Allerdings wird OnChange nicht wie ich dachte bei jedem Eingeben eines neuen Zeichens aufgerufen, so dass ich das mit dem speichern eigendlich weglassen kann :)

danke nochmal
 
Du kannst auch gleich verhindern, dass man überhaupt etwas Anderes eingibt als Zahlen ;)
Code:
<input type="text" onkeypress="return (!isNaN(String.fromCharCode((event.keyCode)?event.keyCode:event.which)))">
 

Neue Beiträge

Zurück