Tous les langages de programmation prévoient une gestion des chaînes de caractères. JavaScript est particulièrement adapté pour le traitement des chaînes.
L'objet String contient de nombreuses méthodes permettant de manipuler les chaînes.
var chaine1="Bonjour"; var chaine2='Bonjour'; console.log(chaine1); console.log(chaine2);
Ici, les 2 variables sont des chaînes de caractères et contiennent toutes les 2 Bonjour
.
Notez dans l'émulateur de la console que Bonjour
est écrit en violet signalant un type String.
Cela se corse quand il s'agit d'initialiser une chaîne avec un de ces caractères :
var chaine1="Bonjour l'ami"; var chaine2='Je vous dis "Bonjour"';Le secret est d'alterner les guillemets et les apostrophes selon les caractères spéciaux à afficher.
var chaine1="Je vous dis "Bonjour""; // ^ ici, le " indique la fin de chaîneIl existe aussi une autre solution, l'anti-slash ou caractère d'échappement :
var chaine1="Je lui dis \"Bonjour l'ami\"";La variable chaine1 contient Je lui dis "Bonjour l'ami". Grâce au caractère
\
, appelé caractère d'échappement, JavaScript a interprété \" comme un guillemet.var chaine="azerty"; var pi=3.14159;La variable chaine est initialisée avec une chaîne de caractères.
var chaine="azerty"; var pi=3.14159; chaine=pi; pi=pi+"2654"; document.write("pi est de type "+ typeof pi + " et contient " + pi );
A la fin de ce script, chaine est un nombre qui vaut 3.14159 ;
pi est une chaîne qui contient "3.14152654".
pi
est bien une String.
La différence peut sembler sans importance. Il n'en est rien. Quand une variable est un nombre, il est possible de lui appliquer des opérations (addition, multiplication, ...). Quand une variable est de type chaîne de caractères, on peut lui appliquer les méthodes propres aux objets chaînes.
JavaScript n'est pas exigeant sur le type des variables, mais si vous essayez d'appliquer une méthode de traitement des chaînes à un nombre, ou inversement, vous risquez une errreur d'exécution, ou pire un mauvais résultat.
var chaine1="Vive le "; var chaine2="JavaScript"; var chaine=chaine1+chaine2; document.write(chaine);
La variable chaine contient après ce script "Vive le JavaScript".
La méthode charAt(n) récupère le nième caractère . Attention, le premier caractère a comme indice 0.
Pour une chaîne initialisée par var chaine="azerty", chaine.charAt(1) retourne "z".
Il est utile de pouvoir extraire un morceau d'une chaîne. Par exemple, déclarons la variable date="15/08/2017". La question est de récupérer le jour, le mois et l'année dans 3 variables différentes.
var date = "15/08/2017"; var jour = date.substring(0,2); var mois = date.substring(3,5); var annee = date.substring(6,10); console.log(jour); console.log(mois); console.log(annee);
Après ce script, jour vaut 15, mois vaut 08 et annee vaut 2017.
Notez que les 3 variables sont encore des String.
Deux méthodes permettent de retrouver une sous-chaîne d'une chaîne. Ces méthodes retrouvent la position d'une chaîne et retourne son indice.
Par exemple, vous avez dans une variable JavaScript un nom de domaine et vous souhaitez retrouver l'extension :
var domaine="www.toutjavascript.com"; var extension=domaine.substring(domaine.lastIndexOf(".")); document.write(extension);
La méthode lastIndexOf(souschaine) retourne l'indice de la dernière occurrence de souschaine.
Si la sous-chaîne n'est pas trouvée, lastIndexOf() retourne -1.
var url="http://www.toutjavascript.com/reference/"; var domaine=url.substring(7,url.indexOf("/",7)); document.write(domaine);
La variable domaine contient dans cet exemple www.toutjavaScript.com qui est une sous-chaine de url qui commence au caractère 7 et qui se termine au premier slash (/) après "http://".
JavaScript offre deux méthodes pour transformer les lettres (et uniquement les lettres) d'un mot en majuscules ou en minuscules.
var chaine="Ceci est un TEXTE"; var maj=chaine.toUpperCase(); var min=chaine.toLowerCase(); document.write(chaine + "<br>"); document.write(maj + "<br>"); document.write(min + "<br>");
A la fin de ce script, toUpperCase() a transformé la chaîne en majuscule et toLowerCase() en minuscule.
On peut penser que ces traitements sont superflus. Ils permettent en fait de rendre plus homogène une saisie.
Imaginez que vos visiteurs remplissent un formulaire avec leurs coordonnées postales, certains mettront sans doute leur nom sans majuscule, le pays en minuscules... Grâce à ces méthodes, vous pourrez corriger leur saisie et avoir un fichier client homogène. Un exemple complet est traité dans le paragraphe suivant.
Pour vérifier qu'un mail est valide, il suffit de tester la présence de @ et du point.
function verifierMail(mail) { if ((mail.indexOf("@")>=0)&&(mail.indexOf(".")>=0)) { console.log(mail + " semble valide"); return true; } else { console.log(mail + " n'est pas valide"); alert("Mail invalide !"); return false; } }
Cette fonction vérifie la présence du caractère @ et du . pour vérifier la validité. Si ces 2 caractères sont trouvés, la fonction retourne true sinon, elle affiche un message et retourne false.
<form> Entrez une adresse mail : <input type="texte" name="mail" value="adresse mail"> <input type="button" value="Vérifier le mail" onClick="verifierMail(this.form.mail.value)"> </form>
Ce qui donne :
Voici une fonction qui ajoute une majuscule à la première lettre d'un mot.
Par exemple pierre, Pierre ou PIERRE deviennent Pierre.
function nomPropre(mot) { var m=mot.charAt(0).toUpperCase() + mot.substring(1).toLowerCase(); console.log(m); return m; }
<form> Essayez grâce à ce formulaire : <input type="text" name="mot" value="pierre" size=15> <input type="button" value="Nom Propre" onClick="nomPropre(this.form.mot.value)"> </form>
Ce qui donne :
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; } var chaine="Toutjs, du js à gogo"; document.write(Remplace(chaine, "js", "JavaScript"));
Ici, on remplace "js" par "JavaScript" dans chaine