2017-02-08 6 views
1

Ich versuche derzeit Benutzer einzuschränken, so dass sie nur Buchstaben oder Zahlen in ein Textfeld eingeben können und wenn etwas anderes als Buchstaben oder Zahlen eingegeben wird, möchte ich den Wert entfernen.Benutzereingaben einschränken

Also mein Regex sieht aus wie ^[a-zA-Z0-9]+$ und die ganzen jQuery-Funktionen sehen wie folgt aus:

$("#myInputField").keyup(function (e) { 
    if (/^[a-zA-Z0-9]+$/.test(this.value)) { 
     this.value = this.value.replace(/^[a-zA-Z0-9]+$/, ''); 
    } 
}); 

aber dies scheint das Gegenteil zu tun. Wenn ich also eine Zahl oder einen Buchstaben eintippe, wird sie ersetzt und alle anderen Zeichen werden zugelassen. Kann mir bitte jemand sagen, wo ich falsch liege?

+0

Verwenden Sie eine negierte Zeichenklasse '.replace (/ [^ a-zA-Z0-9] +/g, '')' –

+0

Ja, das Gegenteil ist der Fall, wenn Sie alphanumerisch suchen und dann alphanumerisch entfernen. Ich habe das nicht versucht (also nur einen Kommentar), aber möglicherweise: '.replace (/ [^ a-zA-Z0-9]/g /, '');' –

+0

Und der Test wäre 'if (/ [^ a-zA-Z0-9]/.test (this.value)) 'oder' if (! (/^[a-zA-Z0-9] + $ /). test (this.value))) ' –

Antwort

3

Ihre regex ist derzeit das:

^[a-zA-Z0-9]+$ 

dass nach unten brechen, die den Beginn der Zeichenfolge übereinstimmt, dann so viele wie möglich alphanumerische Zeichen, dann das Ende des Strings.

Was Sie tatsächlich übereinstimmen möchten, ist jede nicht-alphanumerische Zeichen, und es ist Ihnen egal, wo der Anfang oder das Ende der Zeichenfolge ist.

Als solche wie die Regex in den Kommentaren vorgeschlagen korrekt ist:

[^a-zA-Z0-9] 

Das passt alle nicht-alphanumerische Zeichen.

Sie müssen dies in sowohl die Test-und Ersatzlinien ändern. Außerdem kann jemand mit der rechten Maustaste klicken und in das Textfeld einfügen, so dass dies nicht narrensicher ist (jemand kann auch JavaScript deaktivieren).

+0

Danke dafür, das Einfügen-Problem kann ich nicht einfach '$ ('# validate-serial'). Bind (" einfügen ", funktion (e) {e.preventDefault();});' nach der if-Bedingung? – Code

+1

Sie können versuchen, eine Paste zu verhindern, aber ich schlage vor, Sie * nicht *. Kopieren + Einfügen ist ein integraler Bestandteil von Computern, genau wie der Zurück-Button (ich habe Seiten gesehen, die die Zurück-Schaltfläche unterbrechen). Du könntest die Eingabe onChange oder onBlur überprüfen, aber wieder * kann der Benutzer JavaScript * deaktivieren, also ** musst du es ** serverseitig überprüfen. –

+1

Auf der Serverseite wird die Eingabe überprüft, um sicherzustellen, dass es immer Zahlen/Buchstaben ist. – Code

0

Wenn Sie Ihre Regex an beiden Positionen in [^a-zA-Z0-9] ändern, wird das Problem behoben. Grundsätzlich ist Ihre Regex fast immer wahr und selbst wenn sie falsch ist, handelt sie wahr, weil etwas anderes sie negiert, um wahr zu sein. Ich habe ein Beispiel mit Beispielcode hinzugefügt. Ich benutze auch die Konsole, um es zu beweisen.

$("#myInputField").keyup(function (e) { 
 
    console.log(/[^a-zA-Z0-9]+$/.test(this.value)); 
 
    if (/[^a-zA-Z0-9]+$/.test(this.value)) { 
 
     this.value = this.value.replace(/[^a-zA-Z0-9]+$/, ''); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" id="myInputField"/>

** Zum Zeitpunkt dieser Veröffentlichung ist es eine Antwort. Sie haben eine bessere Formulierung. Mine liefert nur ein Beispiel, an dem ich gearbeitet habe.

0

Wie bereits erwähnt, verwenden Sie /[^a-zA-Z0-9]+$/, um eine Zeichenfolge zu finden, die nicht nur Buchstaben oder Zahlen entspricht.

Beachten Sie, dass die Funktion String.replace die Zeichenfolge mit der Ersetzung zurückgibt. Die aufgerufene Zeichenfolge String.replace ist nicht angepasst.

$("#myInputField").keyup(function (e) { 
    if (/[^a-zA-Z0-9]+$/.test(this.value)) { 
     this.value = this.value.replace(/[^a-zA-Z0-9]/g, ''); 
    } 
}); 

@Cayce K Dank für den Hinweis auf, dass die anderen Symbole :)

+1

Ich glaube nicht, dass sie es geleert haben wollen .. Nur der Charakter, der hinzugefügt wird entfernt. –

0

entfernt werden sollten Sie die folgenden regex an beiden Orten nutzen können (wie auch in ersetzen Anweisung in Ihrem Zustand)

[^ \ d \ w]

Dies negiert Satz, der jedes Zeichen, das nicht in gesetzt ist (das heißt, etwas anderes als alpha numerisch).