2013-01-14 19 views
6

Ich erlaube Zahlen, Buchstaben und Sonderzeichen mit Ausnahme von % und _ in meinem HTML-Textfeld. Ich habe das Muster /[[email protected]#$^&*()-+=]/. Ich denke, es ist nicht der beste Weg, es zu tun, weil ich alle Sonderzeichen außer den beiden genannten auflisten muss. Gibt es einen Weg, auf dem ich nicht alle Sonderzeichen auflisten muss und die beiden genannten nicht mit einbeziehe? BTW, ich benutze Javascript regex.regex - Wie schließe ich "%" und "_" aus?

Für die Demo finden Sie unter http://jsfiddle.net/ce8Th/

Bitte helfen.

Antwort

3

Diese komplexe Schleife ist nicht erforderlich. Nur replace auf die gesamte Zeichenfolge direkt anrufen:

$(this).val(function (i, v) { 
    return v.replace(/%|_/g, ''); 
}); 

Hier ist Ihre Geige: http://jsfiddle.net/ce8Th/1/

+0

Dank es hat wirklich funktioniert und machte meinen Code viel einfacher. Ich werde diesen annehmen. Ich warte nur ein paar Minuten. – NinjaBoy

+0

Ich würde darauf hinweisen, dass dies keine Desinfektion ist - was für Sie in Ordnung ist, aber es bedeutet, dass andere Charaktere erlaubt sind, die nicht in Ordnung sind: Leerzeichen, Tabs, zufällige andere Dinge, die nicht in Ihrer ursprünglichen Liste sind. – jakerella

+0

@jakerella - Die ursprüngliche Frage erwähnt keine Sanitation (obwohl es seine Absicht gewesen sein könnte - in diesem Fall * irgendetwas * Client-Seite ist nutzlos). –

2

Sie genau das Gegenteil tun könnte:

/[%_]/ 

if (pattern.test(.... 

Es ist auch schön, nicht regex zu verwenden, wenn Sie don‘ t muss, nicht, dass es in diesem Fall einen großen Unterschied macht:

if ("%_".split().indexOf(text.charAt(i)) > -1) { 
+1

Ich denke du meintest '/ [^% _] /' - aber du musst vorsichtig damit sein, es würde auch viele andere Zeichen enthalten ... Tabs, neue Zeilen, andere Sprachzeichen usw. – jakerella

2

Eine weiße Liste ist immer am besten. Ich würde zu halten empfehlen, was Sie haben, außer ein Längenmodifizierer Hinzufügen und Start- und End-Zeichen:

/^[[email protected]#$^&*()-+=]+$/ 
1

Würde ich passieren zu erraten werden Corrent, dass Sie diese Benutzereingabe für eine MySQL-Abfrage verwenden LIKE Beteiligung zur teilweisen zu suchen Streichhölzer?

Wenn ja, schließen Sie keine Zeichen aus. Entkomme sie stattdessen auf der Serverseite. Zum Beispiel:

$output = str_replace(Array("%","_"),Array("\\%","\\_"),$input); 
+0

Oder einfach 'addslashes ($ input);'? – jakerella

+0

@jakerella 'addslashes' betrachtet' _' und '%' nicht als ausweichbar. –

+0

Ugh ... das ist nicht cool. Vielen Dank. – jakerella

Verwandte Themen