Problème avec REGEX sous IE

[Résolu]
Signaler
Messages postés
10
Date d'inscription
mercredi 25 janvier 2006
Statut
Membre
Dernière intervention
25 septembre 2006
-
Messages postés
10
Date d'inscription
mercredi 25 janvier 2006
Statut
Membre
Dernière intervention
25 septembre 2006
-
Salut a tous,

je suis entrain de faire un petit script qui fonctionne bien sauf sur IE.

J'ai une fonction qui permet la génération automatique d'un texte à partir de 2 input.

Un petit exemple concret pour comprendre:

input 1: Fonction
input 2: Nom

J'obtient un code généré:

Fonction : Nom

jusque la ca va

si on entre ensuite

input 1: Fonction2
input 2: Nom2

j'obtient alors:

Fonction : Nom
Fonction2 : Nom2

Le problème viens lorsque la meme fonction reviens une seconde fois par exemple:

input 1: Fonction
input 2: Nom3

Sous FF, Opéra et Netscape j'obtient: (ce que je veut)

Fonction : Nom / Nom3
Fonction2: Nom2

mais sous IE j'ai ca:

Fonction : Nom
/ Nom3
Fonction2: Nom2

Voilà le code concerné:

function ajouteintextarea(idtextarea,element1,element2)
{
    //On récupert le text du textarea
    var text=document.getElementById(idtextarea).value;
    //On ahoute le nouveau perso
    var fonction=document.getElementById(element1).value;
    var perso=document.getElementById(element2).value;
   
    reg=new RegExp(fonction+" :","gi"); //Pour mozilla firefox
    test=text.match(reg);
    alert(test);
    if(test!=null)
    {
        alert('pwet');
        reg=new RegExp(test+" (.*)","gi");
        var textainser=text.replace(reg,test+" $1 / "+perso);
        document.getElementById(idtextarea).value=textainser;
    }
    else
    {
        if(text=='')
        {       
            var textainser=fonction+" : "+perso;
            document.getElementById(idtextarea).value=textainser;
        }
        else
        {
            var textainser=text+"\n"+fonction+" : "+perso;
            document.getElementById(idtextarea).value=textainser;
        }
    }
   
}

ou element1 correspond a input 1 et element 2 a input2.

Savez vous comment je pourrais corriger ce problème sous IE? Apparement c'est à cause du \n, mais si je l'enlève ca ne marche plus.

6 réponses

Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
18
C'est vraiment plus simple avec les RegExp

Tu ajoutes...
  var reg = new RegExp("[\r]","gi");
  text =text.replace( regexp, '');
Avant...
  reg =new RegExp(fonction+" :","gi"); //Pour mozilla firefox
  test=text.match(reg);
dans ta source et cela doit être bon...







;0)
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
18
B
onjour...

Je réponds indirectement à ton problème en te donnant le lien d'une source déposée il y a peu sur ce site
CURSEUR dans TEXTAREA
Je sais elle est de moi mais bon, il n'empêche que tu devrais y trouver ta vie
;0)
Messages postés
10
Date d'inscription
mercredi 25 janvier 2006
Statut
Membre
Dernière intervention
25 septembre 2006

Merci pour ta réponse, mais je trouve que c'est un peu l'artillerie lourde toute ces fonctions pour juste un petit saut à la ligne non voulu sous IE.

Tu crois que c'est vraiment du à un saut du curseur? C'est bizarre quand même, il viendrait de la regex?
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
18
B
onjour...

les RegExp ne sont nullement en cause mais plutôt la façon différente qu'on les navigateurs de gérer les retours chariot dans les TEXTAREA...

donc après essais et tests sur FireFox et IE  ce qui suit devrait te convenir...

function Add(idtextarea,element1,element2){
  var szTxt = "";
  var Obj = document.getElementById(idtextarea);
  //On récup. le text du textarea
  var szTxt = Obj.value;
  //On ajoute le nouveau perso
  var fonction=document.getElementById(element1).value;
  var perso=document.getElementById(element2).value;

  reg = new RegExp( fonction+" :","gi");
  Test = szTxt.match( reg);
  //-- Existe Déjà --//
  if( Test!=null){
    var Pos;
    //-- Récup chaque Ligne --//
    var szTmp = new Array();
    szTmp = szTxt.split('\n');
    //-- Formattage des Lignes --//
    for( i =0 ; i < szTmp.length; i++){
      //-- Suppression des retour chariot --//
      Pos = szTmp[i].indexOf('\r');
      if( Pos > -1)
        szTmp[i]=szTmp[i].substring( 0, Pos);
      //-- Test Si ligne concernée --//
      if( szTmp[i].match( reg) !=null)
        szTmp[i] += " / "+perso; // On ajoute
    }
    //-- Rétabli le texte en sortie --//
    szTxt = "";
    for( i =0 ; i < szTmp.length-1; i++)
      szTxt += szTmp[i] +'\n';
    //-- Dernière sans saut de ligne --//
    szTxt += szTmp[i];
  }
  else{
    if( szTxt =='')
      szTxt = fonction+" : "+perso;
    else
     szTxt += "\n" + fonction+" : "+perso;
  }
  //-- Ecriture dans Textarea --//
  Obj.value = szTxt;
}

Voila je pense qu'il y à moyen de faire plus simple avec les RegExp en remplaçant tous les retours chariot d'une traite dans le texte récupéré et en appliquant ton code Mais je te laisse joué...

;0)
Messages postés
10
Date d'inscription
mercredi 25 janvier 2006
Statut
Membre
Dernière intervention
25 septembre 2006

Merci,

je vais essayer ca se soir et je vous tient au courant ;).
Messages postés
10
Date d'inscription
mercredi 25 janvier 2006
Statut
Membre
Dernière intervention
25 septembre 2006

C'est bon ca marche ^^.

Merci beaucoup, et oui je suis d'accord avec Petoleteam, c'est beaucoup plus simple avec les RegEx.

Encore merci ^^.