2017-08-07 2 views
0

Je veux empêcher les utilisateurs d'utiliser les touches de lettres sur l'entrée et j'utiliser le code suivant dans jqueryregex fonctionne pas correctement à chaque touche

var enK = /^(6[5-9])|([7-9][0-9])|(1([01][0-9]|2[0-2]))$/y; 
// this regex is for event code of a-z and A-Z letters in keypress event 
$(document).ready(function(){ 
    $('input').bind('keypress',function(evt){ 
     var evC = evt.which || evt.charCode; 
     if(enK.test(evC)){ 
      event.preventDefault(); 
     } 
    }) 
}); 

Test1:

clés d'entrée: abcdefg

sortie : bdf

Test2:

Touches d'entrée: aaaaaa

Sortie: aaa

Ces tests signifie que:

keypress -Premier est empêché

keypress -Deuxième correspond pas à l'expression rationnelle et pas empêché

-Troisième la pression d'une touche est empêchée

-Une pression de touche ne correspond pas à l'expression rationnelle et n'est pas empêchée

...

Le code suivant a la même valeur.

var enC = /[a-z|A-Z]/g; 
$(document).ready(function(){ 
    $('input').bind('keypress',function(evt){ 
     var evC = evt.which || evt.charCode; 
     evC = String.fromCharCode(evC); 
     if(enC.test(evC)){ 
      event.preventDefault(); 
     } 
    }) 
}); 

Maintenant, comment dois-je résoudre ce problème? Merci.

+0

Votre regex ne fait rien pour vérifier les lettres. Je n'ai aucune idée de ce que vous essayez de faire ici en fonction de ce que vous avez fourni. –

+0

@SpencerWieczorek vérifie le code clé. 'a' = 97, etc. – Jorg

+1

@Jorg Ne serait-il pas plus facile de simplement vérifier la valeur plutôt que les codes-clés? Regex n'est pas vraiment bon pour les plages de nombres. –

Répondre

1
$(document).ready(function(){ 
    $('input').bind('keypress',function(evt){ 
    var key = String.fromCharCode(evt.which || evt.charCode); 
    if(/[a-z]/i.test(key) === false) evt.preventDefault(); 
    }) 
}); 

Ceci empêche toute entrée sauf a-z et A-Z.

https://jsfiddle.net/0b2f7wyL/1/

@fubar dans les commentaires a la bonne réponse: le y est le drapeau « Post-it », il raconte l'expression régulière pour trouver un match à lastIndex et seulement à lastIndex (plus tôt ou plus tard dans la chaîne), ce qui explique pourquoi les autres vérifications ont échoué.