Fonctionne sur tous les navigateurs, c'est tout ce dont vous avez besoin.
function commaSeparateNumber(val){
while (/(\d+)(\d{3})/.test(val.toString())){
val = val.toString().replace(/(\d+)(\d{3})/, '$1'+','+'$2');
}
return val;
}
J'ai écrit ce texte pour qu'il soit compact et précis, grâce aux regex. C'est du JS pur, mais vous pouvez l'utiliser dans votre jQuery comme ça :
$('#elementID').html(commaSeparateNumber(1234567890));
ou
$('#inputID').val(commaSeparateNumber(1234567890));
Toutefois, si vous souhaitez quelque chose de plus propre, avec de la flexibilité. Le code ci-dessous fixera correctement les décimales, supprimera les zéros en tête, et peut être utilisé sans limite. Merci à @baacke dans les commentaires.
function commaSeparateNumber(val){
val = val.toString().replace(/,/g, ''); //remove existing commas first
var valRZ = val.replace(/^0+/, ''); //remove leading zeros, optional
var valSplit = valRZ.split('.'); //then separate decimals
while (/(\d+)(\d{3})/.test(valSplit[0].toString())){
valSplit[0] = valSplit[0].toString().replace(/(\d+)(\d{3})/, '$1'+','+'$2');
}
if(valSplit.length == 2){ //if there were decimals
val = valSplit[0] + "." + valSplit[1]; //add decimals back
}else{
val = valSplit[0]; }
return val;
}
Et dans votre jQuery, utilisez comme ceci :
$('.your-element').each(function(){
$(this).html(commaSeparateNumber($(this).html()));
});
Voici le jsFiddle .
4 votes
Question connexe ici : stackoverflow.com/questions/2901102/
3 votes
+1 pour votre bricolage. Vous devriez inclure votre solution dans votre mise à jour :
<number string>.replace(/\B(?=(?:\d{3})+(?!\d))/g, ',')
2 votes
J'aimerais pouvoir +100 pour votre solution : Regex disant Pas de limite de mot suivi d'un regard positif devant 3 chiffres éventuellement répétés non suivis d'un chiffre. Génial !
0 votes
Cette solution était la meilleure pour la plupart des cas, mais elle n'a pas vraiment fonctionné pour moi. Malheureusement, je dois afficher des chiffres avec 4 et parfois 5 décimales. Les personnes pour lesquelles je travaille ont un nombre élevé de transactions et les fractions de centimes représentent des centaines ou des milliers de dollars (pensez à Office Space). Je viens d'ajouter un peu de code à votre bidule pour lui permettre de gérer les décimales au-delà de 3 : http://jsfiddle.net/W5jwY/554/
0 votes
Véritable réponse à cette question ici : stackoverflow.com/a/2632502/1860982