web-dev-qa-db-ja.com

数字の間にスペースを追加しますか?

数字を入力しようとしています。私のテキストボックスは、このコードを介して数字のみを受け入れるようにしました:

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;
}

しかし、ここで疑問が生じます。ユーザーが番号を入力するときに、iPhoneの電話スペースのようにスペースを作成するにはどうすればよいのでしょうか。たとえば、入力すると1000になります。

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

等...

3文字ごとに右から入力を読み取り、スペースを追加しようとしました。しかし、私の方法は非効率的であり、テキストボックスの値を1000から1000に変更すると、何らかの理由でそれを選択し、その後キーを押してすべてを消去します。

これを行う方法を知っている場合は、jQueryのようなjavascriptプラグインの使用を控えてください。ありがとうございました。

31
user1768788

整数用

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

浮動小数点数には次を使用できます

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

これは単純な正規表現です。 https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Regular_Expressions << Regexの詳細については、こちらをご覧ください。

数値が整数であるか浮動小数点であるかわからない場合は、2番目のものを使用してください...

73
Isham Mohamed

最も簡単な方法:

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

''の代わりに '、'が必要な場合:

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

動作しない場合は、次のようにパラメーターを設定します。「toLocaleString( 'ru-RU')」パラメーター「en-EN」は、「」ではなく「、」で番号を分割します