196 votes

Suppression de la dernière virgule d'une chaîne de caractères

En utilisant JavaScript, comment puis-je supprimer la dernière virgule, mais uniquement si la virgule est le dernier caractère ou s'il n'y a qu'un espace blanc après la virgule ? Voici mon code. J'ai obtenu un fonctionnement violon . Mais il y a un bug.

var str = 'This, is a test.'; 
alert( removeLastComma(str) ); // should remain unchanged

var str = 'This, is a test,'; 
alert( removeLastComma(str) ); // should remove the last comma

var str = 'This is a test,          '; 
alert( removeLastComma(str) ); // should remove the last comma

function removeLastComma(strng){        
    var n=strng.lastIndexOf(",");
    var a=strng.substring(0,n) 
    return a;
}

534voto

Jon Points 2575

Cela supprimera la dernière virgule et les espaces qui la suivent :

str = str.replace(/,\s*$/, "");

Il utilise une expression régulière :

  • El / marquent le début et la fin de l'expression régulière

  • El , correspond à la virgule

  • El \s désigne les caractères d'espacement (espace, tabulation, etc.) et l'élément * signifie 0 ou plus

  • El $ à la fin signifie la fin de la chaîne de caractères

20voto

e-techpulse Points 531

Vous pouvez supprimer la dernière virgule d'une chaîne de caractères en utilisant la méthode slice(), trouvez l'exemple ci-dessous exemple :

var strVal = $.trim($('.txtValue').val());
var lastChar = strVal.slice(-1);
if (lastChar == ',') {
    strVal = strVal.slice(0, -1);
}

Voici un exemple

function myFunction() {
    var strVal = $.trim($('.txtValue').text());
    var lastChar = strVal.slice(-1);
    if (lastChar == ',') { // check last character is string
        strVal = strVal.slice(0, -1); // trim last character
        $("#demo").text(strVal);
    }
}

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<p class="txtValue">Striing with Commma,</p>

<button onclick="myFunction()">Try it</button>

<p id="demo"></p>

19voto

Daniel Sloof Points 6161
function removeLastComma(str) {
   return str.replace(/,(\s+)?$/, '');   
}

8voto

Komal Points 392

Au cas où cela serait utile ou qu'il y ait une meilleure façon de faire :

str = str.replace(/(\s*,?\s*)*$/, "");

Il remplacera toutes les combinaisons qui suivent la fin de la chaîne :

1. ,<no space>
2. ,<spaces> 
3. ,  ,  , ,   ,
4. <spaces>
5. <spaces>,
6. <spaces>,<spaces>

6voto

Ronald Aaronson Points 200

La réponse qui a recueilli le plus de suffrages supprime non seulement la virgule finale, mais aussi tous les espaces qui suivent. Mais enlever ces espaces suivants était no ce qui faisait partie du problème initial. Donc :

let str = 'abc,def,ghi, ';
let str2 = str.replace(/,(?=\s*$)/, '');
alert("'" + str2 + "'");
'abc,def,ghi '

https://jsfiddle.net/dc8moa3k/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X