2011-02-14 2 views
1

Hé les gars, je pense à des façons de désactiver les utilisateurs de taper des caractères spéciaux comme < et>. Mais je voudrais qu'ils utilisent des points et des virgules et des points d'interrogation et des points d'exclamation et des citations. Je suis venu avec ce morceau de code, mais il ne semble pas permettre un caractère spécial .:Désactiver certains caractères spéciaux dans la zone de texte

<script type="text/JavaScript"> 
function valid(f) { 
!(/^[A-zÑñ0-9]*$/i).test(f.value)?f.value = f.value.replace(/[^A-zÑñ0-9]/ig,''):null; 
} 
</script> 
+1

Qu'en est-il le signe dièse '' n, le tilde '~', '' plus' et minus'? Envie de tirets de Word? 'äöü' trémas? Créer une liste saine de caractères autorisés est une quantité folle de travail. Est-ce pour empêcher les gens d'injecter du HTML? Il y a de meilleurs moyens de le faire. –

+0

Puisque les gens peuvent désactiver JS, ce n'est pas efficace de toute façon (pas par lui-même au moins). – Quentin

Répondre

0

pourquoi ne pas simplement vérifier le caractère pressé sur l'événement « onKeyDown »?

<textarea id="foo"></textarea> 

<script> 
document.getElementById('foo').onkeydown = validate; 

function validate(){ 
    var evtobj = window.event? event : e; // IE event or normal event 
    var unicode = evtobj.charCode? evtobj.charCode : evtobj.keyCode; 
    var actualkey = String.fromCharCode(unicode); 
] 

return (/^[A-zÑñ0-9]*$/i).test(actualKey); 
</script> 

Cela devient simplement sur la touche qui a été pressée et si elle est valide retourne true, false sinon, cela, à terme, détermine si la clé est en fait écrit dans la zone de texte ou non

1

Il y a plusieurs façons de le faire, aucune d'entre elles n'est un bon moyen d'y parvenir, mais nous y reviendrons.

  1. vous pouvez lier à des événements onkeyup/onkeydown/onkeypress sur l'élément et d'annuler des événements pour les caractères que vous avez mis à l'index. Cela n'empêchera pas les gens de coller les personnages sur le terrain.

  2. Vous pouvez lier à l'événement onchange de l'élément et les supprimer des caractères de liste noire, une fois que l'utilisateur a terminé la saisie.

Le problème avec tout type de désinfection comme celui-ci en javascript est qu'il est trivial pour un utilisateur avec un petit peu de savoirfaire, de contourner ces mesures et encore télécharger les caractères offensants au serveur de toute façon.

Donc, si vous ne voulez pas que des caractères spéciaux dans l'utilisateur entrée générée vous devez soit

  1. les enlever Serverside après la userinput a été soumis
  2. les garder mais les encoder en entités html &gt; et &lt; pour > et < par exemple avant de les sortir n'importe où sur votre page Web.
1

Essayez avec cette ...

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; 
    } 
    } 
Questions connexes