IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Regexp et firefox


Sujet :

JavaScript

  1. #1
    Membre confirmé Avatar de nicolb
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Par défaut Regexp et firefox
    Bonjour à tous.

    J'ai un petit soucis avec le test d'un formulaire sous firefox.
    Je teste entre autre des saisies de codes postaux et de numéros de téléphone avec les expressions suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    			//vérification du code postal
    			pattern = /^[0-9]{5}$/g;
    			if(!pattern.test(nomform.cp.value)){
    				alert("Merci d'entrer un code postal valide");
    			}
    			else{
    				//vérification du téléphone
    				pattern = /^\+*[0-9\-\/\._]{10,}$/g;
    				if(!pattern.test(nomform.tel.value)){
    					alert("Merci d'entrer un numéro de téléphone valide");
    Sous IE, je n'ai jamais de soucis, mais sous firefox, il ne reconnaît pas toujours les mêmes saisies.
    Exemple:
    Pour les codes postaux, par moment il accepte 99999 (ce qui est normal vue mon expression de test), et à d'autres moments il ne l'accepte pas.
    Quelqu'un aurait-il une idée???
    Merci d'avance

  2. #2
    Expert confirmé

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Par défaut Re: Regexp et firefox
    Citation Envoyé par nicolb
    Quelqu'un aurait-il une idée???
    Utilise un adressage plus standard de tes éléments de formulaire (avec getElementById ou en passant par les vecteurs forms et elements). Cette syntaxe est un caca inventé par IE, qui ne marche que sous IE, et pas toujours de façon predictible.

    Je suppose que ça ne réference pas du tout le champ auquel tu penses dans FireFox...

  3. #3
    Membre confirmé Avatar de nicolb
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Par défaut
    Merci beaucoup

    J'essaye tout de suite !

  4. #4
    Membre confirmé Avatar de nicolb
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Par défaut
    Je viens d'essayer en utilisant getElementById, et tout avait l'air de marcher... Mais au bout de quelques essais, j'ai à nouveau le même problème sous Firefox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    			//vérification du code postal
    			pattern = /^[0-9]{4,5}$/g;
    			if(!pattern.test(document.getElementById("cp").value)){
    				alert("Merci d'entrer un code postal valide");
    			}
    			else{
    				//vérification du téléphone
    				pattern = /^\+*[0-9\-\/\._]{10,}$/g;
    				if(!pattern.test(document.getElementById("tel").value)){
    					alert("Merci d'entrer un numéro de téléphone valide");
    				}
    Il accepte ou refuse aléatoirement certains codes postaux ou numéros de tel...
    Je ne comprends vraiment pas
    Merci d'avance !!

  5. #5
    Membre confirmé Avatar de nicolb
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Par défaut
    En fait j'ai l'impression que lorsqu'il commence à refuser une saisie, il se met à la refuser ou à l'accepter une fois sur deux soumissions de formulaire. Voici mon code complet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    var pattern
    function veriform(nomform)
    {
    	if(nomform==document.annonces){//formulaire de petites annonces
    		if(nomform.email.value==""||nomform.pwd.value==""||nomform.pwdverif.value==""||nomform.addtitle.value==""||nomform.addcontent.value==""){
    		alert("Merci de remplir tous les champs.");
    		}
    		else{//email
    			pattern = /^[a-zA-Z0-9\-_]+[a-zA-Z0-9\.\-_]*@[a-zA-Z0-9\-_]+[a-zA-Z0-9\.\-_]*(?:\.[a-zA-Z0-9]{2,4})$/g;
    			if(!pattern.test(nomform.email.value)){
    			alert("Entrez une adresse e-mail valide SVP!");
    			}
    			else{//password
    			pattern = /^[a-zA-Z0-9]{5,15}$/g;
    			//alert(pattern.test(nomform.pwd.value));
    				if(!pattern.test(nomform.pwd.value)||nomform.pwdverif.value!=nomform.pwd.value){
    				alert("Votre mot de passe contient moins de 5 ou plus de 15 caractères ou il y a une erreur dans sa vérification.");
    				}
    				else{
    					nomform.submit();
    				}
    			}
    		}
    	}
     
    	if(nomform==document.addbase1){//formulaires de base1
     
    		//vérification des champs classiques
    		if(document.getElementById("valuecible").value==""||document.getElementById("nomclub").value==""||document.getElementById("nomprof").value==""||document.getElementById("nomresp").value==""||document.getElementById("adresse").value==""
    		||document.getElementById("cp.value")==""||document.getElementById("ville").value==""||document.getElementById("tel").value==""){
    		alert("Merci de remplir tous les champs marqués par *");
    		}
    		else{
    			//vérification du code postal, entre 4 et 5 caractères (belgique!)
    			pattern = /^[0-9]{4,5}$/g;
    			if(!pattern.test(document.getElementById("cp").value)){
    				alert("Merci d'entrer un code postal valide");
    			}
    			else{
    				//vérification du téléphone
    				pattern = /^\+*[0-9\-\/\._]{10,}$/g;
    				if(!pattern.test(document.getElementById("tel").value)){
    					alert("Merci d'entrer un numéro de téléphone valide");
    				}
    				else{
    					//vérification de l'url
    					pattern = /(?:(?:ht|ft)tps?:\/\/)[a-zA-Z0-9\-_]+[a-zA-Z0-9\/\.\-_]*(?:[a-zA-Z0-9\/]+)$/g;
    					if(document.getElementById("url").value!=""&&document.getElementById("url").value!="http://"&&!pattern.test(document.getElementById("url").value)){
    							alert("Merci d'entrer une url valide.");
    					}
    					else{
    						//vérification de l'entrée d'un e-mail valide
    						pattern = /^[a-zA-Z0-9\-_]+[a-zA-Z0-9\.\-_]*@[a-zA-Z0-9\-_]+[a-zA-Z0-9\.\-_]*(?:\.[a-zA-Z0-9]{2,4})$/g;
    						if(!pattern.test(document.getElementById("email").value)){
    							alert("Entrez une adresse e-mail valide SVP!");
    						}
    						else{
    							//vérification du mot de passe		
    							pattern = /^[a-zA-Z0-9]{5,15}$/g;
    							//alert(pattern.test(nomform.pwd.value));
    							if(!pattern.test(document.getElementById("pwd").value)||document.getElementById("pwdverif").value!=document.getElementById("pwd").value){
    								alert("Votre mot de passe contient moins de 5 ou plus de 15 caractères ou il y a une erreur dans sa vérification.");
    							}
    							else{
    								nomform.submit();
    							}
    						}
    					}
    				}
    			}
    		}
    	}
    }
    Help !!

  6. #6
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <script type="text/javascript">
    var verifcp = /\d{5}/; 
    var veriftel = /^\d{10,14}$/;
    function verif(f){
    	if(!verifcp.test(f["cp"].value)){ 
    		alert("Merci d'entrer un code postal valide");
    		return false
    	}; 
            if(!veriftel.test(f["tel"].value)){ 
    		alert("Merci d'entrer un numéro de téléphone valide"); 
    		return false
    	};
     
    }
     
    </script>
     
    </head>
     
    <body>
     
    <form id="formidable" action="" onsubmit="return verif(this.elements)">
    <p>
    <label for="cp">Entrez votre code postal</label>
    <input type="text" id="cp" name="cp" size="5" maxlength="5" /><br />
    <label for="tel">Entrez votre numéro de téléphone</label>
    <input type="text" id="tel" name="tel" size="14" maxlength="14" />
    </p>
    <p>
    <input type="submit" value="valider" />
    </p>
    </form>

  7. #7
    Membre confirmé Avatar de nicolb
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Par défaut
    Merci beaucoup, j'essaye comme ça.

  8. #8
    Membre confirmé Avatar de nicolb
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Par défaut
    Bonjour.

    Ca ne marche toujours pas...
    En fait, sous firefox, si je ne renseigne pas correctement le formulaire du premier coup, il me détecte alternativement une erreur au niveau du code postal ou du numéro de téléphone, même lorsque un des deux ou les deux sont valides...

    Pourquoi une fois sur deux ?

    Je n'y comprends vraiment rien

    Voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    <script language="javascript">
    function veriform(f){
    		//vérification du code postal, entre 4 et 5 caractères (belgique!)
    		pattern = /^[0-9]{4,5}$/g;
    		if(!pattern.test(f["cp"].value)){
    			alert("Merci d'entrer un code postal valide");
    		return false;
    		}
     
    		//vérification du téléphone
    		pattern = /^\+*[0-9\-\/\._]{10,}$/g;
    		if(!pattern.test(f["tel"].value)){
    			alert("Merci d'entrer un numéro de téléphone valide");
    		return false;
    		}
     
    		//vérification de l'entrée d'un e-mail valide
    		pattern = /^[a-zA-Z0-9\-_]+[a-zA-Z0-9\.\-_]*@[a-zA-Z0-9\-_]+[a-zA-Z0-9\.\-_]*(?:\.[a-zA-Z0-9]{2,4})$/g;
    		if(!pattern.test(f["email"].value)){
    			alert("Entrez une adresse e-mail valide SVP!");
    		return false;
    		}
    }
    </script>
    </head>
     
    <body>
    <form name="addbase1" action="" method="post" onSubmit="return veriform(this.elements)">
    <label for="cp">Code postal</label><br>
    <input type="text" name="cp"><br>
    <label for="tel">Téléphone</label><br>
    <input type="text" name="tel"><br>
    <label for="email">e-mail</label><br>
    <input type="text" name="email"><br>
    <input type="submit" value="valider">
    </form>
    Par avance merci, je commence à desespérer

  9. #9
    Membre confirmé Avatar de nicolb
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Par défaut
    En fait, j'ai l'impression que s'il n'y a aucune erreur, Firefox accepte bien de soumettre le formulaire, mais si par exemple il y a juste une erreur dans l'e-mail, Firefox détectera en plus (à tort) une erreur au niveau du code postal ou du téléphone (alternativement).

  10. #10
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut

    Essayez ce bout de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <html>
    	<body>
       		<button onclick="alert(/^[0-9]{4,5}$/g.test('0000'));">verif</button>
    	</body>
    </html>

  11. #11
    Membre confirmé Avatar de nicolb
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Par défaut
    Il me retourne une fois sur deux "true" ou "false" !!!

  12. #12
    Membre expérimenté Avatar de fred777888999
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    250
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 250
    Par défaut
    J'y croyais pas mais le mien aussi... Dire que tous mes formulaires sont verifies avec des regexp, je vais me mefier maintenant.
    Ceci dit en utilisant le constructeur de l'expression reguliere, il n'y a plus de problemes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <html> 
    <head>
    <script type="text/Javascript">
    function tester() {
    reg=new RegExp("^[0-9]{4,5}$","g");
    alert(reg.test('0000'));
    }
    </script>
    </head>
       <body> 
             <button onclick="tester()">verif</button> 
       </body> 
    </html>
    J'imagine que c'est le g qui est parfois mal interprete, mais ca fait quand meme peur...

  13. #13
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Essaie d'inverser les test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
          pattern = /^\+*[0-9\-\/\._]{10,}$/g;
          if(!pattern.test(f["tel"].value)){
    deviendrait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
          pattern = /^\+*[0-9\-\/\._]{10,}$/g;
          tel = f["tel"].value;
          if(!tel.match(pattern)){

  14. #14
    Membre confirmé Avatar de nicolb
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Par défaut
    J'essaye, merci!

  15. #15
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    pour en revenir à ce que je te postais il y a quelques jours, tu admettras que mon formulaire passe très bien sous ffx;

    en fait, je ne vois pas pourquoi tu t'obstines à nommer de la même manière 3 masques différents (sans compter les regexp à simplifier);

  16. #16
    Membre confirmé Avatar de nicolb
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Par défaut
    Je crois que j'arrive au bout !

    Mr N. la méthode avec match() semble fonctionner, cool!

    fred777888999, en effet, si j'utilise cette syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var pattern = new RegExp...
    , cela semble fonctionner, si ça n'est que pour la vérification de mon e-mail, firefox et ie me retourne une erreur: "invalide quantifier +"
    Voici mon test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var pattern = new RegExp("^\+*[0-9\-\/\._]{10,}$","g",);
    Y a-t-il une réelle erreur de syntaxe dans la définition de mon expression?

  17. #17
    Membre expérimenté Avatar de fred777888999
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    250
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 250
    Par défaut
    A vue de nez, je dirai oui. En effet, comme tu n'utilise plus //, il faut doubler tes \ pour qu'il en reste 1 dans ta chaine de caracteres.
    Ceci dit, je doute que tu veuille faire commencer tes adresses email toutes par +, il y a donc qq chose qui m'echape 1 peu dans ton expression.
    Un lien pour tester et trouver des regexp simples :
    Test expressions regulieres
    Sinon, clairement +1 avec JT, il faut simplifier au maximum tes expressions regulieres et je ne vois pas d'ailleurs a quoi sert le g dans ton cas...
    ++
    Fred.

  18. #18
    Membre confirmé Avatar de nicolb
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 184
    Par défaut
    Autant pour moi, c'est une vérification de numéro de téléphone...

    En fait je ne veux pas qu'il y ait de "\" dans ma chaine, mais juste des".", des "/" ou des "-", et que la chaine puisse commencer par "+"...

    Donc, il me retourne toujours cette erreur, que j'enlève le "g" ou pas...

  19. #19
    Expert confirmé

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Par défaut
    Citation Envoyé par nicolb
    Il me retourne une fois sur deux "true" ou "false" !!!
    Sans le greedy (g) cette RegExp marche très bien. Avec, j'avoue que son fonctionnement est quelque peu surprenant. Mais l'operateur greedy est inutile dans ton cas.

  20. #20
    Expert confirmé

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Par défaut
    Citation Envoyé par nicolb
    En fait je ne veux pas qu'il y ait de "\" dans ma chaine, mais juste des".", des "/" ou des "-", et que la chaine puisse commencer par "+"...
    Essaye un:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var pattern = new RegExp("^(\+)?[0-9\-\/\._]{10,}$");
    Ceci dit j'ai des doutes sur ton pattern. Par exemple:
    C'est un numéro de téléphone pour toi????

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. RegExp IE vs Firefox
    Par keaton7 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/04/2009, 15h03
  2. RegExp et Firefox
    Par Auteur dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 28/04/2006, 16h07
  3. Regexp ok sur IE pas sur Firefox
    Par zebuman dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/06/2005, 13h17
  4. [langage] [RegExp] Question d'expression régulière
    Par cloogy dans le forum Langage
    Réponses: 5
    Dernier message: 08/10/2003, 09h29
  5. regexp
    Par mathieu gérard dans le forum ASP
    Réponses: 4
    Dernier message: 02/10/2003, 18h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo