J'ai utilisé l'idée de Kerry réponse, mais simplifiée depuis que je suis juste à la recherche de quelque chose de simple pour mon but spécifique. Voici ce que j'ai fait:
function numberWithCommas(x) {
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
C'est tout ce que vous devez vraiment savoir.
@Neils Bom a demandé comment les regex fonctionne. Mon explication est un peu longue. Elle ne rentre pas dans les commentaires et je ne sais pas où le mettre donc je le fais ici. Si quelqu'un a d'autres suggestions pour savoir où le mettre, s'il vous plaît laissez-moi savoir.
La regex utilise 2 les assertions avant: un bilan positif pour regarder pour tout point de la chaîne qui a un multiple de 3 chiffres dans une rangée, et un négatif affirmation assurez-vous que le point a exactement un multiple de 3 chiffres. Le remplacement de l'expression met une virgule.
Par exemple, si vous passer "123456789.01", l'affirmation positive va correspondre à chaque endroit, à gauche de la 7 (depuis "789" est un multiple de 3 chiffres, "678" est un multiple de 3 chiffres, "567", etc.). Le négatif assertion vérifie que les multiples de 3 chiffres, ne dispose pas de chiffres après. "789" dispose d'un délai après il est donc exactement un multiple de 3 chiffres, une virgule y va. "678" est un multiple de 3 chiffres, mais il a un "9" après elle, de sorte que ces 3 chiffres sont une partie d'un groupe de 4, et une virgule ne pas y aller. De même pour "567". "456789" est de 6 chiffres, ce qui est un multiple de 3, donc une virgule va de l'avant. "345678" est un multiple de 3, mais il a un "9" après cela, donc pas de virgule y va. Et ainsi de suite. Le "\B" garde la regex de mettre une virgule au début de la chaîne.
@neu-rah mentionné que cette fonction ajoute des virgules dans des endroits indésirables si il y a plus de 3 chiffres après la virgule. Si c'est un problème, vous pouvez utiliser cette fonction:
function numberWithCommas(x) {
var parts = x.toString().split(".");
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
return parts.join(".");
}