JSFiddle - React, Tailwind, and code Playground
HTML
<input type="text" value="1222234" onkeyup="formatNumberInInput(this)"/>
JavaScript
function formatNumberInInput(input) {
//on sauve la valeur en cours
var startValue = input.value;
/* on nettoie le nombre qui pour ne garder que 1111.11
Dans cette fonction on récupère tous les nombres et . ou , via une expression régulière
*/
var numbers = startValue.match(/([\d.,])/g);
// On ne fait le traitement que si on a récupéré des nombres, sinon on vide le champ */
if (numbers) {
// numbers est un tableau ( ["1", "2", ".", "4", "5"] ) , on concatene l'ensemble pour n'avoir qu'une seule chaine */
var cleanNumber = numbers.join("");
/* Ensuite on utilise une expression régulière avancée qui s'occupe de récupérer tous les chiffres qui se trouvent avant un groupe de 3 chiffre répété plusieurs fois
Et pour chacun de ces chiffres ont rajoute un espace après (le $1 représente le chiffre récupéré) */
//on supprime au passage les nombres au dela de 2 apres le . ou la virgule
cleanNumber = cleanNumber.replace(/([.,]\d{2})\d+$/,'$1');
var formattedNumber = cleanNumber.replace(/(\d)(?=(\d{3})+(?:[.,]\d{2})*$)/g, '$1 ');
//on reinjecte le nouveau nombre dans le input
if (startValue != formattedNumber) {
input.value = formattedNumber;
}
} else {
input.value = "";
}
}