Ich versuche eine Zahleneingabe zu machen. Ich habe so gemacht, dass mein Textfeld nur Zahlen über diesen Code akzeptiert:
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;
}
Aber jetzt stellt sich die Frage, wie ich Leerzeichen erstellen würde, wenn der Benutzer seine Nummer eingibt, ähnlich wie beim iPhone, aber mit Zahlen, zum Beispiel, wenn er Folgendes eingibt: 1000 wird es 1 000;
1
10
100
1 000
10 000
100 000
1 000 000
10 000 000
100 000 000
1 000 000 000
Etc...
Ich habe versucht, die Eingabe von rechts für jeweils 3 Zeichen zu lesen und ein Leerzeichen hinzuzufügen. Aber mein Weg ist ineffizient und wenn ich den Wert in der Textbox von 1000 auf 1 000 ändere, wird er aus irgendeinem Grund ausgewählt und bei jedem weiteren Tastendruck wird das Ganze gelöscht.
Wenn Sie wissen, wie das geht, verzichten Sie bitte auf Javascript-Plugins wie jQuery. Danke.
Für ganze Zahlen verwenden
function numberWithSpaces(x) {
return x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, " ");
}
Für Gleitkommazahlen können Sie verwenden
function numberWithSpaces(x) {
var parts = x.toString().split(".");
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, " ");
return parts.join(".");
}
Dies ist eine einfache Regex-Arbeit. https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Regular_Expressions << Weitere Informationen zu Regex finden Sie hier.
Wenn Sie sich nicht sicher sind, ob es sich um eine Ganzzahl oder eine Gleitkommazahl handelt, verwenden Sie einfach die 2. ...
Einfachster Weg:
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
Wenn Sie "," anstelle von "" möchten:
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
Wenn dies nicht funktioniert, stellen Sie den Parameter wie folgt ein: "toLocaleString ('ru-RU')" Parameter "en-EN", teilt die Zahl durch ',' anstelle von ''