Remplacer un sous chaine dans une autre

Messages postés
18
Date d'inscription
lundi 12 janvier 2009
Statut
Membre
Dernière intervention
20 mai 2018
- - Dernière réponse : aerolyte
Messages postés
468
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.
Afficher la suite 

9 réponses

Messages postés
17280
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
21 juillet 2019
57
0
Merci
tu devrais jouer avec des Regexp...



Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Commenter la réponse de Renfield
Messages postés
468
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
4 mai 2013
1
0
Merci
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
Commenter la réponse de aerolyte
Messages postés
468
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
4 mai 2013
1
0
Merci
oups faut pas oublier de virer les secondse parentheses fermantes a la fin
Commenter la réponse de aerolyte
Messages postés
468
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
4 mai 2013
1
0
Merci
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
Commenter la réponse de aerolyte
Messages postés
33
Date d'inscription
samedi 4 décembre 2010
Statut
Membre
Dernière intervention
31 mars 2016
0
Merci
Merci aerolyte j'essaye ta fonction et je reviens après pour confirmer.
Tout ce qui brille n'est pas or.
Commenter la réponse de stealone
Messages postés
33
Date d'inscription
samedi 4 décembre 2010
Statut
Membre
Dernière intervention
31 mars 2016
0
Merci
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.
Commenter la réponse de stealone
Messages postés
468
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
4 mai 2013
1
0
Merci
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})$/);
Commenter la réponse de aerolyte
Messages postés
33
Date d'inscription
samedi 4 décembre 2010
Statut
Membre
Dernière intervention
31 mars 2016
0
Merci
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.
Commenter la réponse de stealone
Messages postés
468
Date d'inscription
mardi 17 avril 2007
Statut
Membre
Dernière intervention
4 mai 2013
1
0
Merci
a mon humble avis il serait préférable de le gèrer en javascript directement
Commenter la réponse de aerolyte