regex-pattern für löschen, Pfeile, und der escape-Taste

Ich Schreibe ein javascript-code zu beschränken, die die Tasten in einem Textfeld eingegeben.

function keyRestricted(e) {
    var keypressed;
    var keychar;
    var keycheck;
    //IE - keyCode
    //Netscape/Firefox/Opera - which
    keypressed = e.keyCode || e.which;
    keychar = String.fromCharCode(keypressed);
    //alert(keychar);
    keycheck = /[a-zA-Z0-9\b]/;
    return keycheck.test(keychar);
} //keyrestricted

meine regex ist jetzt /[a-zA-Z0-9\b]/, die alphanumerische und die backspace-Taste. Ich möchte ermöglicht das löschen, L/R Pfeile, und der escape-Taste, um in firefox (3.6).

Ich bin nicht sicher wissen, was sind die Symbole für diese Tasten.

In ie8, die escape-Taste (entf/Pfeile) ist noch immer aktiv, selbst wenn die \e-Schalter ist ausgeschlossen von der regex, wenn Sie gedrückt wird, stellt sich es zurück,/leert das Textfeld ein.

Im FF, habe ich die Flucht in den Ausdruck /[a-zA-Z0-9\b\e]/, aber es scheint nicht zu funktionieren, für firefox, das ist, wenn die escape-Taste gedrückt wird, wird es nicht zurücksetzen/leeren Textfeld.

was sind das gültige symbol für die regex-zu ermöglichen, alphanumerisch, L/R Pfeile, zu löschen, zu entkommen?

Auch, was ist die übersetzung für diese [a-zA-Z0-9\-\_]?
Es war gemeint zu werden alphanumerische Zeichen und Bindestriche. Aber was ist der slash vor dem Bindestrich, da der Bindestrich nicht mit einem slash? und was ist der \_ da der Unterstrich ist nicht angepasst, indem der Ausdruck?

TIA

Bearbeiten

Der Grund, warum mit keycode-Nummern wie vorgeschlagen, durch nnnnn funktionierte nicht für mich (für andere Menschen?) ist da die Tastencodes von 65-90 sind für Großbuchstaben, obwohl einige websites behaupten, dass diese Tasten funktionieren für die beiden unteren und oberen Fällen.

Diese http://www.lookuptables.com/ website zeigt, dass die Kleinbuchstaben sind von 97-122. Leider hat dieser Bereich einige nicht zugeordnete überschneidungen mit einigen Zeichen. Zum Beispiel das Zeichen " \ " ist aufgeführt, wie mit 220 keycode. Aber mein filter zu deaktivieren der Tasten - > 122 würde immer noch erlauben, den \ durch zu kommen. Es gibt auch andere Beispiele.

Habe ich getestet mit meinem laptop-Tastatur und einem externen full-size-Tastatur.

Edit 2

Habe ich kombiniert sowohl die regex-und die keycode-Argumente in einer Funktion. Die Funktion funktioniert im Prinzip, aber aufgrund crazy keycode Konflikte, es funktioniert aber nicht mit dem % - Zeichen. Es muss sowohl der onkeydown und onkeypress zu fangen, alle Tasten (außer der Taste%). Siehe meine Diskussion hierjavascript regex für key event input-Validierungen-Fehlersuche helfen

<head>
<script type="text/javascript">
function keyRestricted(evt) {
    var theEvent = evt || window.event;
    var key = theEvent.keyCode || theEvent.which;
    var keychar = String.fromCharCode(key);
    //alert(keychar);
    var keycheck = /[a-zA-Z0-9]/;
    //backspace || delete || escape || arrows
    if (!(key == 8 || key == 27 || key == 46 || key == 37 || key == 39)) {
        if (!keycheck.test(keychar)) {
            theEvent.returnValue = false; //for IE
            if (theEvent.preventDefault) theEvent.preventDefault(); //Firefox
        }
    }
}
</script>
</head>
<body>
    Please modify the contents of the text field.
    <input 
        type="text" value="" 
        onKeypress="return keyRestricted(event)" 
        onKeydown="return keyRestricted(event)" 
    />
</body>
  • Ist es zwingend zu verwenden, eine regexp? Einfach die Kontrolle keypressed gegen die codes löschen etc. wäre mehr straight-forward.
  • Die keycodes für alle Tasten gefunden werden kann hier. In Ihrer Funktion, was ist der Punkt, der Ihre else if(e.which)? Wenn e.which ist nicht definiert, Ihr code läuft auf jeden Fall mit keypressed undefiniert, die wahrscheinlich nicht was Sie beabsichtigen. (Aber auf der anderen Seite, wenn Sie sicher sind, dass e.which definiert werden soll, warum dann die if?)
  • Ich habe versucht die anderen Methoden, die gewesen gezeigt auf dieser Seite. Sie scheinen nicht zu funktionieren/Verhalten, die Art und Weise, dass ich beabsichtige, für mein script zu arbeiten. Diese Methode funktioniert am besten, aber ich brauche diesen Schalter für diese Tasten.
  • Siehe meine Antwort unten. Es gibt Ihnen einige zuverlässige Möglichkeiten, dies zu tun, ohne Verwendung von regulären Ausdrücken. Beachten Sie aber, dass ich würde nicht empfehlen, es zu tun überhaupt: Sie sind in der Regel besser überprüfen Sie das Feld onchange, onblur oder onsubmit, es sei denn, Sie haben eine rock-solid, den Benutzer zu stoppen und einfügen und/oder drag ' N ' 'dropping ungültige Zeichen (und wenn Sie das tun du bist der einzige). In jedem Fall vergessen Sie nicht, Sie müssen überprüfen Sie es wieder server-Seite sowieso.
  • Beispiel, der keycode für die Rechte Pfeil ist 39, was bedeutet, dass die übersetzen regex-Schalter?
  • Es nicht, das ist der Punkt. Nicht alle Tasten haben einen entsprechenden Charakter-Wert, den Sie setzen können, in eine Zeichenfolge. Nicht verwenden, regex für diese. Regex ist ein großartiges Werkzeug, aber es löst nicht alle Probleme.
  • Ich mache oninput (ähnlich onchange), ich habe einen anderen Satz von Validierung auf dem Bildschirm für ungültige Zeichen, wenn drag-and-drop Auftritt. Ich habe viele Stunden damit verbracht, und dies scheint die am meisten kompatible routine für mein Bedürfnis. Ich brauche nur die Umrechnung von der Schlüsselcodes zu den regex-Schalter.
  • Regex-tests strings von Zeichen. Nicht alle Tasten haben einen entsprechenden Charakter und daher können Sie nicht verwenden, Regex für diesen Prozess Schlüssel. Eine andere Art es auszudrücken ist, dass die Tasten sichtbar sind Regex. Alle Tasten haben einen entsprechenden Schlüsselcode, so können Sie leicht testen Sie ohne Regex, und man kann leicht passen, wie ein test in der Funktion in Frage, indem Sie testen, ob Ihre keypressed variable entspricht dem numerischen codes für die Tasten, die Sie interessieren (wie in meiner Antwort). Regex ist das falsche tool für diesen job. Akzeptieren Sie es und ziehen weiter (als ich werde).
  • P. S. Sie erwähnte mit oninput. Nach MDN, "Dieses Ereignis wird nur aufgerufen, wenn der angezeigte text ändern würde, so ist es nicht aufgerufen, wenn der Benutzer drückt nicht Darstellbare Tasten." So ist es nicht für die Arbeit Pfeiltasten sowieso. Und wird nicht unterstützt in älteren Versionen von IE oder anderen Browsern.

InformationsquelleAutor Jamex | 2011-08-29
Schreibe einen Kommentar