web-dev-qa-db-fra.com

Ajouter de l'espace entre les nombres?

J'essaie de faire une entrée numérique. J'ai fait en sorte que ma zone de texte accepte uniquement les chiffres via ce code:

function isNumber(evt) {
    evt = (evt) ? evt : window.event;
    var charCode = (evt.which) ? evt.which : evt.keyCode;
    if (charCode > 31 && (charCode < 48 || charCode > 57)) {
        return false;
    }
    return true;
}

Mais maintenant, la question se pose de savoir comment créer des espaces pendant que l'utilisateur tape son numéro, un peu comme l'espacement téléphonique de l'iPhone, mais avec des chiffres, par exemple, s'ils tapent: 1000, cela deviendra 1000;

1
10
100
1 000
10 000
100 000
1 000 000
10 000 000
100 000 000
1 000 000 000

Etc...

J'ai essayé de lire l'entrée de droite pour chaque 3 caractères et d'ajouter un espace. Mais mon chemin est inefficace et lorsque je change la valeur de 1000 à 1 000 dans la zone de texte, il la sélectionne pour une raison quelconque, en appuyant sur n'importe quelle touche après cela, efface le tout.

Si vous savez comment faire cela, veuillez vous abstenir d'utiliser des plugins javascript comme jQuery. Je vous remercie.

31
user1768788

Pour les entiers, utilisez

function numberWithSpaces(x) {
    return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, " ");
}

Pour les nombres à virgule flottante, vous pouvez utiliser

function numberWithSpaces(x) {
    var parts = x.toString().split(".");
    parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, " ");
    return parts.join(".");
}

Il s'agit d'un travail regex simple. https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Regular_Expressions << En savoir plus sur Regex ici.

Si vous n'êtes pas sûr que le nombre soit entier ou flottant, utilisez simplement le deuxième ...

73
Isham Mohamed

Manière la plus simple:

1

var num = 1234567890,
result = num.toLocaleString() ;// result will equal to "1 234 567 890"

2

var num = 1234567.890,
result = num.toLocaleString() + num.toString().slice(num.toString().indexOf('.')) // will equal to 1 234 567.890

3

var num = 1234567.890123,
result = Number(num.toFixed(0)).toLocaleString() + '.' + Number(num.toString().slice(num.toString().indexOf('.')+1)).toLocaleString()
//will equal to 1 234 567.890 123

4

Si vous voulez ',' au lieu de '':

var num = 1234567.890123,
result = Number(num.toFixed(0)).toLocaleString().split(/\s/).join(',') + '.' + Number(num.toString().slice(num.toString().indexOf('.')+1)).toLocaleString()
//will equal to 1,234,567.890 123

Si cela ne fonctionne pas, définissez le paramètre comme: "toLocaleString ('ru-RU')" paramètre "en-EN", divisera le nombre par le ',' au lieu de ''