76 votes

Validation des champs par expression régulière dans jQuery

Dans jQuery, existe-t-il une fonction/plugin que je peux utiliser pour faire correspondre une expression régulière donnée dans une chaîne de caractères ?

Par exemple, dans un champ de saisie de courrier électronique, je reçois une adresse électronique et je veux voir si elle est au bon format. Quelle fonction jQuery dois-je utiliser pour vérifier si mon expression régulière de validation correspond à l'entrée ?

J'ai cherché une solution sur Google, mais je n'ai rien trouvé.

1 votes

Le titre de cette question est un peu trompeur. Il devrait peut-être être mieux qualifié pour indiquer que cela a à voir avec la correspondance des valeurs de saisie du formulaire. J'ai donné +1 à la réponse de nickf, car c'est ce que je cherchais.

84voto

nickf Points 185423

Si vous souhaitez rechercher certains éléments sur la base d'une regex, vous pouvez utiliser la fonction filter fonction. Par exemple, si vous voulez vous assurer que l'utilisateur n'a saisi que des chiffres dans toutes les zones de saisie, trouvons toutes les entrées qui ne correspondent pas et mettons-les en évidence.

$("input:text")
    .filter(function() {
        return this.value.match(/[^\d]/);
    })
    .addClass("inputError")
;

Bien sûr, s'il ne s'agissait que de quelque chose comme ça, vous pourriez utiliser le plugin de validation de formulaire, mais cette méthode peut être appliquée à n'importe quel type d'élément. Un autre exemple pour montrer ce que je veux dire : Trouvez tous les éléments dont id correspond à /[a-z]+_\d+/

$("[id]").filter(function() {
    return this.id.match(/[a-z]+_\d+/);
});

32voto

Klatys Points 381

J'utilise jQuery et JavaScript et cela fonctionne bien pour moi :

var rege = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
if(rege.test($('#uemail').val())){ //do something }

5 votes

Léger ajout, le vôtre ne reconnaît pas le fait d'avoir un '+' dans votre adresse e-mail : var rege = /^([A-Za-z0-9_\+\- \. ])+\@([A-Za-z0-9_\-]) \. ])+ \. ([A-Za-z]{2,4})$/ ; Je ne dis pas que le mien est parfait, je dis simplement que le vôtre ne fonctionne pas pour mon courriel :-)

26voto

Daniel Schaffer Points 14707

Je crois que ça le fait :

http://bassistance.de/jquery-plugins/jquery-plugin-validation/

Il a des modèles intégrés pour des choses comme les URL et les adresses e-mail, et je pense que vous pouvez aussi lui faire utiliser les vôtres.

1 votes

Mais qu'en est-il de la correspondance générale des expressions rationnelles ? Peut-être quelque chose comme la recherche d'une expression rationnelle dans un texte, etc.

12 votes

Je veux dire que vous pouvez toujours utiliser la regex de javascript directement, si c'est tout ce que vous avez besoin de faire... expressions-régulières.info/javascript.html

7 votes

C'est juste moi, ou JQUERY a un site web horrible ? Je n'arrive pas à trouver facilement comment utiliser ou télécharger cette chose.

26voto

Hugoware Points 13645

À moins que vous ne recherchiez quelque chose de spécifique, vous pouvez déjà effectuer une correspondance par expression régulière en utilisant le langage Javascript régulier avec des chaînes de caractères.

Par exemple, vous pouvez effectuer une correspondance en utilisant une chaîne de caractères de la manière suivante...

var phrase = "This is a phrase";
phrase = phrase.replace(/is/i, "is not");
alert(phrase);

Cherchez-vous quelque chose d'autre que la correspondance des expressions régulières en général ?

27 votes

Votre exemple retournera "This not is a phrase" ! :-)

7 votes

C'est drôle - Je n'ai jamais exécuté le code mais vous avez raison - Il correspond au premier 'is' qui est en fait à la fin du mot 'This' - Comme il ignore le reste de la chaîne, il ne fait rien au deuxième 'is'. Très drôle :)

0 votes

-1 pour pas assez de jQuery ... ... ... ok, je plaisante, j'ai en fait upvoted votre réponse :)

3voto

bilelz Points 39

Mon code :

$("input.numeric").keypress(function(e) { /* pour les champs qui ne prennent que du numeric en entrée */          
            var key = e.charCode || e.keyCode || 0;                     
            var keychar = String.fromCharCode(key);
            /*alert("keychar:"+keychar + " \n charCode:" + e.charCode + " \n key:" +key);*/
            if (  ((key == 8 || key == 9 || key == 46 || key == 35 || key == 36 || (key >= 37 && key <= 40)) && e.charCode==0) /* backspace, end, begin, top, bottom, right, left, del, tab */
                    || (key >= 48 && key <= 57) ) { /* 0-9 */
                return;
            } else {
                e.preventDefault();
            }
        });

4 votes

Il ne s'agit pas d'utiliser une expression régulière

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X