regex – ¿Cómo excluyo "%" y "_"?

Estoy permitiendo numbers, letras y caracteres especiales a exception de % y _ en mi textbox html. Tengo el patrón /[a-zA-Z0-9!@#$^&*()-+=]/ . Creo que no es la mejor manera de hacerlo porque tengo que enumerar todos los caracteres especiales, excepto los dos mencionados. ¿Hay alguna manera en la que no tenga que enumerar todos los caracteres especiales y no include los dos mencionados? Por cierto, estoy usando javascript regex.

Para la demostración, consulte http://jsfiddle.net/ce8Th/

Por favor ayuda.

No hay necesidad de ese bucle complejo. Solo llame a replace directamente en la cadena completa:

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

Aquí está tu violín: http://jsfiddle.net/ce8Th/1/

Podrías hacer lo contrario:

 /[%_]/ if (pattern.test( .... 

También es bueno no usar expresiones regex si no es necesario, no es que haga una gran diferencia en este caso:

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

Una list blanca es siempre la mejor. Recomiendo mantener lo que tienes, excepto agregar un modificador de longitud y caracteres de inicio y fin:

 /^[a-zA-Z0-9!@#$^&*()-+=]+$/ 

¿Sería casual que supiera que está utilizando esta input de usuario para una consulta MySQL que involucra a LIKE para search coincidencias parciales?

Si es así, no excluyas los personajes. En cambio, escapéalos en el lado del server. Por ejemplo:

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