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 :

Probleme avec REGEX sous IE


Sujet :

JavaScript

  1. #1
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut Probleme avec REGEX sous IE
    Salut a tous,

    j'ai un problème avec une expression réguliere sous IE. J'ai un texte et je veut tester la présences d'une chaine de caractère. Ca marche sous FF mais sous IE il ne détecte rien.

    voici le code concerné:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    text=document.getElementById(cible).innerHTML;
    	Regex='<input value="'+id+'"';
    	var reg=new RegExp(Regex,'gi');
    	text2=text.match(reg);
    Y'a-t-il une synthaxe qu'IE n'apprécie pas?

    PS: Je viens de regarder et ca ne marche pas non plus avec opéra et netscape. Il n'y a donc que sous FF que ca marche pour le moment.

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    normalement, les regexp sont indiquées entre / au lieu des '...

  3. #3
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    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 681
    Points : 5 221
    Points
    5 221
    Par défaut
    eh oui... comme chacun sait, fox est permissif, ces temps-ci

  4. #4
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Citation Envoyé par javatwister
    eh oui... comme chacun sait, fox est permissif, ces temps-ci
    Ce n'est pas forcément un défaut. Ca juste tendance a rendre les programmeurs de plus en plus fénéants. Et donc de les rendre de plus en plus talentueux lol.

  5. #5
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Arf je viens d'essayer mais ca ne marche pas.

    J'ai essayer ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    text=document.getElementById(cible).innerHTML;
    	Regex=/<input value="'+id+'"/;
    	var reg=new RegExp(Regex,'gi');
    	text2=text.match(reg);
    et ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    text=document.getElementById(cible).innerHTML;
    	Regex='/<input value="'+id+'"/';
    	var reg=new RegExp(Regex,'gi');
    	text2=text.match(reg);
    Ou est le problème?

  6. #6
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    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 681
    Points : 5 221
    Points
    5 221
    Par défaut
    plusieurs problèmes;

    d'abord, le nommage des variables: "text" et "id" sont à proscrire;

    ensuite, tu récupères une chaîne via innerHTML, et IE va donc ratiboiser tous les quotes rencontrés autour des valeurs d'attributs; bref pour faire quelque chose de compatible, voici un exemple:
    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
    <script type="text/javascript">
     
    function check(t,idi){
     
    reg=new RegExp("<input value=\"*"+idi+"\"*","gi");
     
    alert(t.innerHTML.match(reg));
    }
     
    </script>
     
     
    <p id="cible">
    blablabla<br />
    <input value="truc" type="text" />
    blablabla<br />
    <input value="truc" type="text" />
    blablabla<br />
    <input type="button" value="test" onclick="check(this.parentNode,'truc')" />
    </p>
    Ceci dit, s'il n'y a qu'une seule chaîne possible, ta regexp n'est pas très utile;

  7. #7
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Merci j'ai essayer d'adapter en faisant ca mais ca ne marche toujours pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    text1=document.getElementById(cible).innerHTML;
    reg=new RegExp("<input value=\"*"+id1+"\"*","gi");
    text2=text1.match(reg);
    alert(text2);
    J'ai vérifié, sous IE text1 correspond bien a une chaine de caractère.

    SOus IE text2 est toujorus null alors que sous FF il retrouve bien la chaine recherché.

  8. #8
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771

  9. #9
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Je viens de tester le code suivant sous IE, il marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function testRegex( idElem, search )
    {
      var text1 = document.getElementById( idElem ).innerHTML;
      alert( text1 );
      var reg = new RegExp( "<input value=\"*" + search + "\"*", "gi" );
      var text2 = text1.match( reg );
      alert( text2 );
    }
    avec comme HTML :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      <div id="regexCible">
        <input value="tagada" type="text">
      </div>
      <a href="#" onclick="testRegex('regexCible', 'tagada')">Test regex</a>
    Conclusion : tu dois avoir une coquille quelque part. Quelles sont les données en entrée de ta fonction ??

    NB :
    - le quantificateur "*" sert à tester [0-n] occurrences. Dans ton cas, tu cherches à tester [0-1] occurrences des guillemets à cause du cas spécifique IE. Pour ça, le quantificateur "?" est plus approprié.
    - le drapeau "g" n'est utile que si tu as plusieurs possibilités de correspondance de motif sur la chaîne testée.
    - si tu cherches à tester un attribut, cette méthode me semble peu robuste. Mieux vaudrait récupérer l'attribut qui t'intéresse en passant par DOM (getElementById, getAttribute) et le tester après, éventuellement avec une regex.

  10. #10
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Bon je vais détailler ce qu'il ce passe alors car le code se génére tout seul en AJAX.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <tr>
    <td colspan="2">
    <div id="affrechanime2">
    </div>
    </td>
    <td>											                      Rechercher:											</td>
    <td> 
         <input type="text" name="rechanime" id="rechanime" class="inputmoyen" onkeyup="go(document.getElementById(\'rechanime\').value,\'affrechanime\',\'\',\'../AJAX/rechercheanime6.php?'.$dvdassoc.'motcle=\');">
    </td>
    </tr>
    Le genre de code généré par la page rechercheanime6.php est :

    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
     
    <br><table class="tableres" cellspacing="1"><tr class="titre"><td>Titre</td><td></td></tr><tr class="class1" > 
     
    				<td onMouseOver="this.className='classhover';" onMouseOut="this.className='class1';">
    					<a href="../critiques/anime.php?idanime=22" target="blank">Anime 1</a>
    				</td>
    				<td>
     
    					<button type="button" OnClick="reanime('affrechanime2','Anime 1','22');" class="petitbouton2">Ajouter</buton>
    				</td>
    			</tr><tr class="class2" > 
     
    				<td onMouseOver="this.className='classhover';" onMouseOut="this.className='class2';">
    					<a href="../critiques/anime.php?idanime=23" target="blank">Anime 2</a>
    				</td>
    				<td>
     
    					<button type="button" OnClick="reanime('affrechanime2','Anime 2','23');" class="petitbouton2">Ajouter</buton>
    				</td>
    			</tr></table>
    Donc quand je clique sur le bouton Ajouter ca execute la fonction reanime:

    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
     
    function reanime(cible,titre,id1)
    {  
    	text1=document.getElementById(cible).innerHTML;
    	alert(text1);
    	reg=new RegExp("<input value=\"*"+id1+"\"*","i");
    	text2=text1.match(reg);
    	alert(text2);
     
    	if(text2==null)
    	{
    		document.getElementById(cible).innerHTML=text1+'<span class="titresupanime">'+titre+'</span><input type=text value='+id1+' style="display:none;" name="supanime[]">&nbsp;<button type="button" name="'+id1+'" class="petitbouton2" OnClick="check=confirm(\'Confirmer vous la supression de cet anime? (la base de donné sera mise à jour)\');if(check!=false){go(document.getElementById(\'affrechanime2\').innerHTML,\''+cible+'\',\'rien\',\'../AJAX/supanimepcritdvd.php?idsupanime='+id1+'&text=\');}">Supprimer</button><br>'; 
    	}
    	else
    	{
    		alert('Cet anime à déjà été ajouté!');
    	}
    }
    Et avec cette fonction je fait une REGEX pour voir si la ligne avec l'id correspondant existe deja. Car si je clique sur un autre id ca rajoute une nouvelle ligne, si je clique sur un élément qui a déja été ajouté ca renvoi un alert en disant que l'élément est déjà présent. Mais pour l'instant ca ne fait ca que sous FF.

    Savez vous d'ou peut venir cette erreur.

    N'hésitez pas à demander si vous avez besoin de plus de détail.

  11. #11
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Doublon

  12. #12
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    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 681
    Points : 5 221
    Points
    5 221
    Par défaut
    Merci j'ai essayer d'adapter en faisant ca mais ca ne marche toujours pas
    comment ça "essayé d'adapter"? avant d'avoir chargé, testé et compris le code?
    une regexp, c'est aussi con qu'une calculatrice! ça te sort le résultat voulu quelle que soit la météo ou l'époque où tu l'utilises

  13. #13
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Citation Envoyé par javatwister
    comment ça "essayé d'adapter"? avant d'avoir chargé, testé et compris le code?
    une regexp, c'est aussi con qu'une calculatrice! ça te sort le résultat voulu quelle que soit la météo ou l'époque où tu l'utilises

    Je voulais dire que j'ai utiliser ta syntaxe. J'ai juste garder la structure de ma fonction. Je vois pas le rapport avec les calculatrices?

    Et j'ai tres bien compris la regex. Tu as juste rajouté des * qui sont a mon avis ne sont pas obligatoire.

  14. #14
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    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 681
    Points : 5 221
    Points
    5 221
    Par défaut
    topic illisible; tu ne prends pas le temps de regarder ce que tu écris...

  15. #15
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Citation Envoyé par javatwister
    topic illisible; tu ne prends pas le temps de regarder ce que tu écris...

    Comment ca?

  16. #16
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    J'ai trouvé d'ou viens l'erreur! .

    Mais j'ai pas trouver la cause.

    J'ai regarder le code généré sous IE. Et dans mon input ca inverse les postitions des éléments.

    sous FF ca fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input value="22" style="display:none"...
    et sous IE et compagnie ca fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input style="display:none" value="22"...
    C'est normal que ces navigateurs change l'ordre des éléménts dans la balises?

  17. #17
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    J'imagine que ça dépend comment tu construis ton code Si tu codes ton HTML en dur, la réponse est sans doute non. Si tu construis ta page en passant par DOM, il n'y a pas à ma connaissance de garantie que les noeuds soient conservés exactement dans l'ordre où tu les déclares, tant que ça ne change pas la sémantique de la page.

    En tout cas, ça rejoint ce que je disais à propos de la robustesse du code : ta regex dépend trop de la manière (arbitraire) dont sont ordonnés les attributs de la balise que tu testes. Si quoi que ce soir dans ta balise change (navigateur, évolution du code), ton code devient obsolète...

  18. #18
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Citation Envoyé par Herode
    J'imagine que ça dépend comment tu construis ton code Si tu codes ton HTML en dur, la réponse est sans doute non. Si tu construis ta page en passant par DOM, il n'y a pas à ma connaissance de garantie que les noeuds soient conservés exactement dans l'ordre où tu les déclares, tant que ça ne change pas la sémantique de la page.

    En tout cas, ça rejoint ce que je disais à propos de la robustesse du code : ta regex dépend trop de la manière (arbitraire) dont sont ordonnés les attributs de la balise que tu testes. Si quoi que ce soir dans ta balise change (navigateur, évolution du code), ton code devient obsolète...
    Oui mais je n'ai pas vraiment d'autre choix je crois. Je suis obliger de faire comme ca. Ce qui est marrant c'est que l'ordre est différent pour chaque navigateur. Avec opéra il a un ordre différents encore.

    J'ai tripplé mes expression régulière comme ca tout les cas sont couvert. J'aurai peut etre pu en faire une seul mais il y a un problème d'échappement. Sous IE et sous FF ca réagis totalement différement avec AJAX. Sous FF j'ai des type=\"text\" et sous IE type=text avec la meme source. Donc je préfere faire plusieurs regex, au moin ca marche.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probleme avec to_number sous access
    Par lassmust dans le forum Access
    Réponses: 1
    Dernier message: 01/12/2005, 14h18
  2. Probleme avec height sous IE.
    Par Death83 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 21/10/2005, 22h20
  3. Problèmes avec Hibernate (sous Eclipse)
    Par Pierric dans le forum Hibernate
    Réponses: 2
    Dernier message: 07/04/2005, 14h35
  4. Problème avec GLUT sous borland c++ builder X
    Par hiko-seijuro dans le forum GLUT
    Réponses: 1
    Dernier message: 04/11/2004, 12h47
  5. Problème avec phpize sous debian woody
    Par nipepsi dans le forum Debian
    Réponses: 3
    Dernier message: 09/09/2004, 11h54

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