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.
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 ...
Manière la plus simple:
var num = 1234567890,
result = num.toLocaleString() ;// result will equal to "1 234 567 890"
var num = 1234567.890,
result = num.toLocaleString() + num.toString().slice(num.toString().indexOf('.')) // will equal to 1 234 567.890
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
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 ''