2009-05-25 17 views

Respuesta

7

Tienes dos métodos para esto:

  1. verificación del evento "pulsación de tecla". Si el usuario presiona una tecla de carácter especial, deténgalo allí
  2. marque el evento "onblur": cuando el elemento de entrada pierde el foco, valide su contenido. Si el valor no es válido, muestre una advertencia discreta junto a ese cuadro de entrada.

Sugeriría el segundo método porque es menos irritante. Recuerde también marcar onpaste. Si solo usa la tecla presionar, entonces podemos copiar y pegar caracteres especiales así que use onpaste para restringir Pegar caracteres especiales

Además, también sugiero que reconsidere si realmente desea evitar que los usuarios ingresen caracteres especiales. Porque muchas personas tienen $, #, @ y * en sus contraseñas.

Supongo que esto podría ser para evitar la inyección SQL; de ser así: es mejor que maneje los cheques del lado del servidor. O mejor aún, escape de los valores y guárdelos en la base de datos.

+1

Limitar la entrada no es necesariamente restrictivo, puede ser ingresar números telefónicos, códigos postales, fechas, etc. ¡Pero +1 al consejo de duplicar la verificación en el servidor! – PhiLho

2

Le ayudaría ... suponga que tiene un formulario con el formato "formname" y un cuadro de texto con el nombre "txt". entonces usted puede utilizar siguiente código para permitir que sólo los valores aphanumeric

var checkString = document.formname.txt.value; 
if (checkString != "") { 
    if (/[^A-Za-z\d]/.test(checkString)) { 
     alert("Please enter only letter and numeric characters"); 
     document.formname.txt.focus(); 
     return (false); 
    } 
} 
11

Prueba con esto, esta función permite alfanuméricos y espacios:

function alpha(e) { 
    var k; 
    document.all ? k = e.keyCode : k = e.which; 
    return ((k > 64 && k < 91) || (k > 96 && k < 123) || k == 8 || k == 32 || (k >= 48 && k <= 57)); 
} 

en su html:

<input type="text" name="name" onkeypress="return alpha(event)"/> 
+0

¿Por qué está probando 'document.all' para determinar la compatibilidad con' e.keyCode'? ¿Por qué no probar 'e.keyCode' en su lugar? – rvighne

+1

Técnicamente no necesita ningún paréntesis de agrupación; '&&' tiene prioridad sobre '||'. – rvighne

6

Para los caracteres especiales:

var iChars = "[email protected]#$%^&*()+=-[]\\\';,./{}|\":<>?"; 

for (var i = 0; i < document.formname.fieldname.value.length; i++) { 
    if (iChars.indexOf(document.formname.fieldname.value.charAt(i)) != -1) { 
     alert ("Your username has special characters. \nThese are not allowed.\n Please remove them and try again."); 
     return false; 
    } 
} 
2

creo comprobar keypress eventos es no completamente adecuado, ya que creo que los usuarios pueden copiar/pegar en cuadros de entrada sin activar una tecla.

Así que onblur es probablemente algo más confiable (pero es menos inmediato).

Para hacer realmente seguro de caracteres que no desea que no se introducen en cajas de entrada (o áreas de texto, etc.), creo que tendrá que

  1. cheque keypress (si usted quiere dar retroalimentación inmediata) y
  2. también verifique onblur,
  3. y valide las entradas en el servidor (que es la única manera real de asegurarse de que nada no deseado entre en sus datos).

Los ejemplos de código de las otras respuestas no tendrán ningún problema para hacer los controles del lado del cliente (sólo no depender solamente en la comprobación keypress eventos), pero como se ha señalado en la respuesta aceptada, un servidor -el control del lado es realmente necesario.

Cuestiones relacionadas