Remplacer un sous chaine dans une autre

stealon Messages postés 17 Date d'inscription lundi 12 janvier 2009 Statut Membre Dernière intervention 20 mai 2018 - 13 févr. 2012 à 02:43
aerolyte Messages postés 465 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 4 mai 2013 - 6 mars 2012 à 12:51
Bonjour j'ai toujours mon formulaire avec un champ de type text pour insérer les numéros de téléphone et je souhaite formater les numéros de façon à ce que par l'évènement onblur de javascript, si le visiteur a insérer le numéro au format 657637789 ou 65.76.37.78.9 dans le champ, il vera apparaître 65-76-37-78-9 par exemple. Pour ce faire j'ai deux fonction qui ne marchent pas. la première est appelée par la deuxième. Je ne sais pas ce qui cloche alors je sollicite votre aide. merci. voici mon code.
/*Cette fonction recherche dans une chaîne expr toutes les occurrences d'une sous-chaîne a et les remplace par une sous-chaîne b.*/
function Remplace(expr,a,b) 
    {
      var i=0
      while (i!=-1) 
{
         i=expr.indexOf(a,i);
         if (i>=0) 
           {
             expr=expr.substring(0,i)+b+expr.substring(i+a.length);
             i+=b.length;
            }
        }
      return expr
    }

/*fonction qui formate le numero de téléphone*/
function formaterNumero(objet1, objet2)
   {
     if( objet1 != "00-00-00-00" || objet1 != "" && objet1.length == 8)
{
          var un = objet1.charAt(0); 
          var deux = objet1.charAt(1);
          var trois = objet1.charAt(2);
  var quatre = objet1.charAt(3);
  var cinq = objet1.charAt(4);
  var six = objet1.charAt(5);
  var sept = objet1.charAt(6);
  var huit = objet1.charAt(7);
 if(/*les chiffres ne sont pas séparés*/
    isNaN(un) false && isNaN(deux) false && isNaN(trois) == false && isNaN(quatre) == false && isNaN(cinq) == false && isNaN(six) == false && isNaN(sept) == false && isNaN(huit) == false)  
   {
     var tiret = "-";
     var resultat;
     resultat = un+deux+tiret+trois+quatre+tiret+cinq+six+tiret+sept+huit;
    objet2.setAttribute("value", "resultat");

 }
else if( /*si chaque deux chiffres sont séparé par un point*/ 
  objet1.length 11 && objet1.charAt(2) "." && objet1.charAt(5) == "." && objet1.chartAt(8) == ".")
  {
    var resultat;
    resultat = Remplace(object1,.,-);
    objet2.setAttribute("value", "resultat");
 
   }
        }
}

Voici le formulaire
<form action="suivant.php" method="post">
<label> Téléphone</label>

 


</form>



Merci à vous.

9 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
13 févr. 2012 à 07:44
tu devrais jouer avec des Regexp...



Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
aerolyte Messages postés 465 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 4 mai 2013 1
20 févr. 2012 à 19:35
bonjour.

function ctrlnum(A0){
    var res=A0.match(/^(\d{2})\.?(\d{2})\.?(\d{2})\.?(\d{2})\.?(\d{2})$/);
    var nf='',i;
    for(i=1;i<res.length;i++){nf+=(i==1)?res[i]:"-"+res[i];}
    return nf;
}
ctrlnum('06.66.66.66.66'));//06-66-66-66-66
ctrlnum('0666666666'));//06-66-66-66-66


tout simplement.

mais attention il faudra certainement prendre en compte les entrés farfelues et erronées
0
aerolyte Messages postés 465 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 4 mai 2013 1
20 févr. 2012 à 19:45
oups faut pas oublier de virer les secondse parentheses fermantes a la fin
0
aerolyte Messages postés 465 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 4 mai 2013 1
20 févr. 2012 à 22:48
dsl, j'ai la tete ailleur:

function ctrlnum(A0){
    var res=A0.match(/^(\d{2})\.?(\d{2})\.?(\d{2})\.?(\d{2})\.?(\d{2})$/);
    return res[0];
}
ctrlnum('06.66.66.66.66');//06-66-66-66-66
ctrlnum('0666666666');//06-66-66-66-66
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
stealone Messages postés 33 Date d'inscription samedi 4 décembre 2010 Statut Membre Dernière intervention 31 mars 2016
5 mars 2012 à 01:55
Merci aerolyte j'essaye ta fonction et je reviens après pour confirmer.
Tout ce qui brille n'est pas or.
0
stealone Messages postés 33 Date d'inscription samedi 4 décembre 2010 Statut Membre Dernière intervention 31 mars 2016
5 mars 2012 à 08:03
J'ai essayé la fonction et malheureusement elle ne fait rien. par contre je m'accroche à ma fonction que j'ai développée elle fonctionne à moitié. je veux dire qu'elle retourne un 12-34-56-78 si le visiteur insère 12345678 déjà je comprend mal les regexp version javascript pour répondre à Renfield.
L'autre moitié de ma fonction renvoie "undefined" quand j'insère un numéro de type: 12.34.56.78 ou du genre 12-34-56-78

ma fonction là voici je reconnais que c'est beaucoup de code pour faire peu mais bon quand ça marche ya pas de choix
    function formaterNumero(objet, objet2)
    {
 
 var Numero;
 
 var modele1 = new RegExp("^[2379]{1}[0-9]{1}(.){1}[0-9]{2}(.){1}[0-9]{2}(.){1}[0-9]{2}$", "g");
 var modele2 = new RegExp("^[23479]{1}[0-9]{1}(-){1}[0-9]{2}(-){1}[0-9]{2}(-){1}[0-9]{2}$", "g");
 //cas de présence des lettres
 if( objet !"" && isNaN(objet) true && objet.length < 11)
    {
 alert("Avertissement! Le numéro de téléphone ne doit contenir que des chiffres.");
 return "00-00-00-00";
}
//cas où le premier numero de téléphone est absent
 else if(objet2 "" || objet2"00-00-00-00")
    {
 alert("Avertissement! \n\nVeuillez devez d'abord insérer le numero de téléphone dans le champ: N° de téléphone 1.");
 return "00-00-00-00";
}
//cas où le numero contient moins de 8 chiffres
 else if(objet != "" && objet.length < 8)
    {
     alert("Avertissement! Le numéro de téléphone doit contenir 8 chiffres!");
 return "00-00-00-00";
    }
 else if(objet "" || objet.length < 8)//||objet.length 11 && isNaN(objet)== true
    {
 alert("Avertissement! Si vous n'insérez pas de numéro de téléphone, celui-ci sera remplcé par: "00-00-00-00"");
 return "00-00-00-00";
}
 else if( objet != "00-00-00-00" || objet != "" && objet.length == 8)
    {
 if(isNaN(objet) == false /*si c'est un entier positif et si les chiffres ne sont pas séparés*/)  
    {
      var un = objet.charAt(0); /*charAt(n) retourne le caractere d'indice n dans un tableau*/
     var deux = objet.charAt(1);
     var trois = objet.charAt(2);
     var quatre = objet.charAt(3);
     var cinq = objet.charAt(4);
     var six = objet.charAt(5);
     var sept = objet.charAt(6);
     var huit = objet.charAt(7);
             var tiret = "-";
     Numero = un+deux+tiret+trois+quatre+tiret+cinq+six+tiret+sept+huit;
     return Numero;
  }

}
 else if(/^\s+[23479]{1}[0-9]{7}\s*/.test(objet))
{
 var tab = /^\s+[23479]{1}[0-9]{7}\s*/.test(objet);
 var num = tab[1];
 var un = num.charAt(0); /*charAt(n) retourne le caractere d'indice n dans un tableau*/
 var deux = num.charAt(1);
 var trois = num.charAt(2);
 var quatre = num.charAt(3);
 var cinq = num.charAt(4);
 var six = num.charAt(5);
 var sept = num.charAt(6);
 var huit = num.charAt(7);
 var tiret = "-";
 Numero = un+deux+tiret+trois+quatre+tiret+cinq+six+tiret+sept+huit;
 return Numero;
}//75.31.11.91 75-31-11-91
 else if(modele2.test(objet)== true) //on test si la regexp trouvera une occurrence ou non sur l'objet (renvoi un booleen)
{
 Numero = objet;
 return Numero;
}
else if(objet.match(modele1)) //on test si la regexp trouvera une occurrence ou non sur l'objet (renvoi un booleen)
{
 Numero = objet;
 return Numero;
}

 else{ Numero = objet; return Numero; }
}


les argument sont les valeurs des deux champs text réservés aux numéros de téléphone

Tout ce qui brille n'est pas or.
0
aerolyte Messages postés 465 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 4 mai 2013 1
5 mars 2012 à 10:42
bonjour.
en effet jesuis desolé je suisun poil surmené la bonne fonction est ma première

function ctrlnum(A0){
    var res=A0.match(/^(\d{2})\.?(\d{2})\.?(\d{2})\.?(\d{2})\.?(\d{2})$/);
    var nf='',i;
    for(i=1;i<res.length;i++){nf+=(i==1)?res[i]:"-"+res[i];}
    return nf;
}
ctrlnum('06.66.66.66.66');//06-66-66-66-66
ctrlnum('0666666666');//06-66-66-66-66


cordilement

si tu veux passer sur 8 chiffres il suffit de changer la regexp:
var res=A0.match(/^(\d{2})\.?(\d{2})\.?(\d{2})\.?(\d{2})$/);
0
stealone Messages postés 33 Date d'inscription samedi 4 décembre 2010 Statut Membre Dernière intervention 31 mars 2016
5 mars 2012 à 12:32
Merci aerolyte pour ta volonté à me sortir de ce bourbier mais ta fonction ne marche pas je l'appelle avec l'événement onlbur genre:
<label for="numero">Votre numero de téléphone:</label>




ça ne marche pas vraiment, merci encore.
Tout ce qui brille n'est pas or.
0
aerolyte Messages postés 465 Date d'inscription mardi 17 avril 2007 Statut Membre Dernière intervention 4 mai 2013 1
6 mars 2012 à 12:51
a mon humble avis il serait préférable de le gèrer en javascript directement
0
Rejoignez-nous