2013-01-14 24 views
6

Im consentire numeri, lettere e caratteri speciali ad eccezione di % e _ nella mia casella di testo html. Ho il modello /[[email protected]#$^&*()-+=]/. Penso che non sia il modo migliore per farlo perché devo elencare tutti i caratteri speciali tranne i due menzionati. C'è un modo in cui non devo elencare tutti i caratteri speciali e non includere i due menzionati? A proposito, sto usando regex javascript.regex - Come escludere "%" e "_"?

per la demo si prega di vedere http://jsfiddle.net/ce8Th/

prega di aiuto.

risposta

3

Non c'è bisogno di quel ciclo complesso. Basta chiamare replace direttamente l'intera stringa:

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

Ecco il vostro violino: http://jsfiddle.net/ce8Th/1/

+0

Grazie ha funzionato davvero e reso il mio codice molto più semplice. Accetterò questo. Sto solo aspettando qualche minuto. – NinjaBoy

+0

Farei attenzione che questa non sia una sanitizzazione, che potrebbe andar bene per te, ma significa che saranno ammessi altri caratteri che potrebbero non essere d'accordo con te: spazi, schede, altre cose a caso non presenti nell'elenco originale. – jakerella

+0

@jakerella - La domanda originale non menziona le misure igieniche (anche se potrebbe essere stata la sua intenzione - nel qual caso * qualsiasi cosa * il lato client è inutile). –

2

Si può solo fare il contrario:

/[%_]/ 

if (pattern.test(.... 

E 'anche bello non usare regex se don' Non è necessario, non che faccia una grande differenza in questo caso:

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

Penso che intendessi '/ [^% _] /' - ma devi stare attento a questo, includerebbe anche molti altri caratteri ... tab, nuove linee, altri caratteri di lingua, ecc. – jakerella

2

Una lista bianca è sempre la migliore. Suggerirei mantenere quello che hai, tranne l'aggiunta di un modificatore di lunghezza e di inizio e caratteri finali:

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

Sarei capita di essere Corrent in indovinando che si sta utilizzando questo input dell'utente per una query MySQL che coinvolge LIKE per cercare parziali le partite?

In tal caso, non escludere caratteri. Invece, sfuggirli sul lato server. Ad esempio:

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

o semplicemente 'addslashes ($ input);'? – jakerella

+0

@jakerella 'addslashes' non considera' _' e '%' per essere scappato. –

+0

Ugh ... non è bello. Grazie. – jakerella