Calculer certains caractères 2 fois avec un code JS

Signaler
Messages postés
10
Date d'inscription
mercredi 7 septembre 2016
Statut
Membre
Dernière intervention
2 avril 2021
-
 Hadus -
Bonjour à toutes et à tous,

J'ai un code html et dans ce code HTML je calcul le nombre de caractères. Tout fonctionne comme il faut mais j'aimerais bien que mon calculateur calcule certains signe spécieux pour 2 caractères. Par exemple : \ [ ] { } ^ | €. Est-ce que c'est faisable ? Comment je peux faire ?

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>TEST</title>
</head>
<body>
 <textarea id="data" cols="50" rows="5" onkeyup="nbrCara('data','nbrcara');" onkeydown="nbrCara('data','nbrcara');" onmouseout="nbrCara('data','nbrcara');"></textarea>
 <br>
 Nombre de caractères : <span id="nbrcara">0</span>
</body>
<script>
function nbrCara(cara,nbrcara) {
 var nombre = document.getElementById(cara).value.length;
 document.getElementById(nbrcara).innerHTML = nombre;} 
</script>
</html>

1 réponse

Salut,
euh calculer un caractère? Plutôt compter leurs nombres je suppose?
Renseignez vous sur les méthode de l'objet STRING d'abord.

Cela devrait être suffisant pour ce que vous expliquez de façon assez spécieuse.
...astuce une chaîne peut facilement être décomposée en plusieurs puis recomposée sinon vous avez aussi les expressions irrégulières et d'autres méthodes qui sont arrivés avec ES6.

https://www.w3schools.com/jsref/jsref_obj_string.asp

Exemple concret:

var chaine='abcde#fghi#jk';
var compteDouble=0;
if(chaine.indexOf('#')>-1{
  if(chaine.lastIndexOf('#')===chaine.indexOf('#')){
   compteDouble+=1;
   return;
  }else{
   var sousChaine=chaine.substring(chaine.indexOf('#')+1, chaine.length);
    if(sousChaine.indexOf('#')>-1){
      compteDouble+=2;
    }
  }
}
var longueurAvecCompteDouble=chaine.length+compteDouble;
console.log('longueur avec doublement des caractères est de '+longueurAvecCompteDouble);


Bien sûr ici ça ne marche que pour un ou 2 caractères dans la chaîne. C'est un exemple pour démarrer, à vous d'être plus malin ou plutôt plus récursif ;)
les boucles, l'algorithmique tout ça tout ça. forEach (méthode) par exemple fonctionne sur les chaînes aussi. Même si un while serait plus élégant voire plus pratique il reste pas grand chose à faire ici:
var chaine='abcde#fghi#jk';
var compteur=0;
chaine.forEach(function(){
console.log(chaine[compteur]);
compteur+=1;
});

console.log(compteur);