2012-11-05 3 views
23

Possible en double:
How to prevent users from entering invalid characters inside an input fieldPermettre que Alphanumeric valeurs

J'ai 3 champs de saisie sur une page. L'un d'entre eux devrait permettre les nombres, les autres alphabets et le 3ème soit des nombres ou des alphabets. Puisqu'il s'agit de la seule exigence, je ne veux pas utiliser le plugin de validation, ni aucun autre plugin tiers. Comment puis-je faire cela en créant mon propre plugin en utilisant jQuery pur?

C'est ce que je l'ai fait, mais je reçois un sentiment que le code deviendra trop long

$(this).keydown(function(e) 
     { 
      var key = e.charCode || e.keyCode || 0;    
      return (
       key == 8 || 
       key == 9 || 
       key == 46 || 
       (key >= 37 && key <= 40) || 
       (key >= 48 && key <= 57) || 
       (key >= 96 && key <= 105)); 
     }); 

http://jsfiddle.net/Cvus8/

Quelqu'un peut-il me dire quelle meilleure façon explosion, les d'aborder cette question?

+1

Regex peut être une option pour minimiser la taille du code, mais vous devrez creuser plus. – Scorpio

+2

N'oubliez pas que les utilisateurs peuvent également coller du texte à partir du presse-papiers, ainsi que des différences locales dans les jeux de caractères. –

+0

alors comment puis-je gérer les scénarios de presse-papiers? – KayKay

Répondre

43

La meilleure solution pourrait être d'aller avec des contrôles basés sur l'expression régulière. Exemple ci-dessous limitera uniquement des caractères alphanumériques dans le champ avec id text:

$('#text').keypress(function (e) { 
    var regex = new RegExp("^[a-zA-Z0-9]+$"); 
    var str = String.fromCharCode(!e.charCode ? e.which : e.charCode); 
    if (regex.test(str)) { 
     return true; 
    } 

    e.preventDefault(); 
    return false; 
}); 
+2

cela ne fonctionne pas pour les symboles tels que! @ # $%^& *() – CountMurphy

+1

@CountMurphy L'expression régulière dans la réponse est conçue pour autoriser uniquement les lettres majuscules/minuscules et les nombres. Il ne permet pas de symboles par conception. Si vous avez besoin de symboles, vous pouvez développer l'expression régulière pour les inclure. – Kami

+0

On dirait que j'ai fait une erreur dans mon code de test. Les symboles mentionnés ci-dessus apparaissaient dans ma boîte de texte. Mon erreur, votre solution fonctionne. – CountMurphy

10

un chiffre dans la plage de 1-9, suivie de zéro ou plusieurs autres chiffres:

^[1-9]\d*$ 

Assurez-vous qu'une chaîne contient uniquement (ASCII) des caractères alphanumériques, et met en évidence les parties

^[\w ]+$ 

Seulement Alphabets sans espace ou _

^[a-zA-Z]+$ 

Pour correspondre à une chaîne contenant uniquement ces caractères (Ou une chaîne vide), essayez

^[a-zA-Z0-9_]*$ 

Certains modèles qui peuvent aider ..mais je pense que vous devrez les modifier selon vos need..I l'espoir qu'il aide ..

Questions connexes