hawkmaster: Input non alphanumeric ersetzen

Hallo zusammen,

In einem Textfeld soll geprüft werden das nur Zahlen und Buchstaben und -_ eingegeben werden.

Ich habe es mit folgender Funktion versucht. Der Regex greift zwar, es kommt bei Falscheingabe zur Meldung, aber ich würde gerne gleich wieder das falsche Zeichen vom Textfeld löschen.
Das klappte jedoch noch nicht so ganz mit dem Return.
Mache ich ein Denkfehler?

  
<input type="text" name="txt_ordernumber" onkeyup="checkInput(this)"/>  

  
function checkInput(str){  
  var lettersnumbers = /^[0-9a-zA-Z-_]+$/;  
  if(str.value.match(lettersnumbers))  
  {  
  //all OK  
  return true;  
  }  
  else  
  {  
  alert('Please input alphanumeric characters only');  
  var newstring = str.value.replace(/\W+/g, "")  
  //alert(newstring);  
  return newstring;  
}  

vielen Dank und viele Grüße
hawk

  1. Hi,

    Der Regex greift zwar, es kommt bei Falscheingabe zur Meldung, aber ich würde gerne gleich wieder das falsche Zeichen vom Textfeld löschen.
    Das klappte jedoch noch nicht so ganz mit dem Return.
    Mache ich ein Denkfehler?

    Ja – es ist nicht die Aufgabe des keyup-Handlers, den aktuellen Feldinhalt „automatisch“ mit dem Rückgabewert der Handler-Funktion zu überschreiben.

    Entweder setzt du den neuen Wert direkt aus der Handler-Funktion heraus;
    oder du nutzt den Event keydown stattdessen – wenn du dessen Default verhindert (preventDefault), dann wird das fragliche Zeichen gar nicht erst zum Inhalt des Eingabefeldes hinzugefügt. (Allerdings musst du die Prüfung dann auf die gedrückte Taste bzw. ihren Zeichenkode beziehen, und nicht auf das value des Eingabefeldes – denn das enthält zu dem Zeitpunkt das „neue“ Zeichen noch gar nicht.)

    MfG ChrisB

    --
    Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/
  2. @@hawkmaster:

    nuqneH

    In einem Textfeld soll geprüft werden das nur Zahlen und Buchstaben und -_ eingegeben werden.

    Und warum willst du das mit JavaScript nachbauen, was in Browsern schon nativ vorhanden ist?

    Weg mit dem JavaScript, her mit @pattern.

    Qapla'

    --
    „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)