2009-05-25 19 views

risposta

7

Hai due approcci a questo:

  1. controllo l'evento "pressione di un tasto". Se l'utente preme un tasto di carattere speciale, fermalo proprio lì
  2. controlla l'evento "onblur": quando l'elemento di input perde lo stato attivo, convalida il suo contenuto. Se il valore non è valido, visualizza un avviso discreto accanto a quella casella di input.

Suggerirei il secondo metodo perché è meno irritante. Ricorda di controllare anche onpaste. Quindi possiamo copiare e incollare caratteri speciali quindi utilizzare onpaste per limitare l'inserimento di caratteri speciali

Inoltre, ti suggerisco di riconsiderare se vuoi davvero impedire agli utenti di immettere caratteri speciali. Perché molte persone hanno $, #, @ e * nelle loro password.

Presumo che questo potrebbe essere al fine di prevenire l'iniezione SQL; In tal caso: è meglio che tu gestisca i controlli sul lato server. O meglio ancora, sfuggire ai valori e memorizzarli nel database.

+1

L'input di limitazione non è necessariamente restrittivo, potrebbe essere l'inserimento di numeri di telefono, codici postali, date, ecc. Ma +1 al consiglio per raddoppiare il controllo sul lato server! – PhiLho

2

Ti aiuterebbe ... presumi di avere un modulo con il modulo "formname" e una casella di testo con il nome "txt". quindi è possibile utilizzare il codice seguente per consentire solo i valori 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

Prova questo, questa funzione permette alfanumerici e spazi:

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)); 
} 

nel tuo html:

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

Perché stai testando 'document.all' per determinare il supporto per' e.keyCode'? Perché non testare 'e.keyCode' invece? – rvighne

+1

Tecnicamente non è necessaria alcuna parentesi di raggruppamento; '&&' ha la precedenza su '||'. – rvighne

6

Per i caratteri speciali:

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

penso controllando keypress eventi è non del tutto adeguato, poiché credo che gli utenti possano copiare/incollare nelle caselle di input senza attivare la pressione di un tasto.

Quindi onblur è probabilmente un po 'più affidabile (ma è meno immediato).

Per fare veramente caratteri sicuri che non si desidera non sono entrati in caselle di input (o textarea, ecc), penso che sarà necessario

  1. controllo keypress (se si vuole dare un feedback immediato) e
  2. controlla anche onblur,
  3. e convalida gli input sul server (che è l'unico vero modo per assicurarsi che non entri nei tuoi dati nulla di indesiderato).

Gli esempi di codice nelle altre risposte funziona bene per fare i controlli lato client (basta non fare affidamento solo sul controllo keypress eventi), ma, come è stato sottolineato nella risposta accettata, un server il controllo del lato è realmente richiesto.