11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous,

Depuis plusieurs heures, je me bat avec les expressions régulières (je n'en avais jamais manipulé auparavant.

Mon besoin est simple mais pas assez pour moi Smiley sweatdrop

Je souhaite vérifier une chaîne et que cette vérification me renvoie vrai s'il est trouvé les caractères suivants (je ne les mets pas tous) :
- éçè&@à
- ou encore qu'il y a plus d'un "." (point)

Donc s'il y a plus d'un point dans la chaîne (pas forcément consécutifs) ou un caractère accentué, la fonction doit renvoyer vrai

Voilà ce que j'ai fait :

var fichier = document.forms["upload"].elements["fichierUploade"].value;
          
          var reg = new RegExp("[àéè]|\.{2,}", "ig");
          var res = reg.test(fichier);
          
          if(res)
          {
            alert("expression vérifiée");
          }
          else
          {
            alert("expression non vérifiée");
          }


Voilà ce que j'obtiens lorsque je compare (méthode test de l'objet regExp en javascript) le pattern avec ces chaines :
- la lettre "a" : renvoie FAUX
- la chaine "aaaa" ou n'importe quelle chaine de caractères non accentués avec ou sans "." : renvoie VRAI (là c'est un pb)
- la chaine "élève" : renvoie VRAI

Donc cela ne convient pas, j'aurais dû obtenir faux pour la chaine "aaaa"

Merci de votre aide

PS : pas la peine de m'envoyer sur commentçamarche, toutjavascript et compagnie, j'ai lu ce qu'il y avait à lire ou presque. Effectivement, ça parait facile lorsqu'on explique une expression toute faite, mais c'est bien plus difficile d'en créer une Smiley langue
Modifié par manu_css (22 Jun 2007 - 10:11)
Salut Smiley cligne ,

peut-être comme ça:
var reg = new RegExp("[àéè]|\\..*\\.", "gi");


A+
Modifié par Heyoan (21 Jun 2007 - 23:46)
Non, tu n'as pas tout vu sur toutjavascript. Tu es passé à côté d'un outil pratique qui s'appelle testeur d'expressions régulières et qui te permet de tester en direct ce que tu essaies. J'en ai aussi un sur mon site.

Ceci dit, pour ton problème, je pense qu'il faut le faire en deux fois :
1 - On vérifie s'il y a des accents
2 - On vérifie s'il y a plus d'un point

En décomposant le problème, ça devient tout de suite plus facile.
La regexp à créer pour le point 1 est triviale, et le point 2 n'est guère plus compliqué.
1 - [âêîôûàèìòùáéíóúäëïöüãõñç] et les mêmes en majuscule pour être sûr que tu prends bien tout (je ne suis pas sûr que le flag i fonctionne correctement pour les caractères accentués, à vérifier).

2 - \..*\.
Merci Heyoan, ta solution fonctionne, je vais l'enrichir pour compléter le test. Peut être à tout à l'heure alors Smiley langue .


Encore merci.
Salut Smiley cligne ,
Grumelo a écrit :
Moi je veux bien le lien vers le testeur de regEx. Smiley lol

Voici celui de Quentin que j'ai utilisé car je fais mes regexp pour PHP et ce n'est pas tout à fait la même écriture qu'avec new RegExp("...");.

A+