2013-05-19 6 views
17

숫자 입력을하려고합니다. 내 텍스트 상자는이 코드를 통해 번호를 받아 있도록했습니다 :숫자 사이에 공백을 추가 하시겠습니까?

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

하지만 지금은 문제가 온다, 나는 사용자로 공간이 많은 아이폰의 전화 간격 것처럼, 자신의 번호를 입력됩니다 만들 것입니다 방법, 그러나 예를 들어 숫자를 입력하면 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에서 1 000으로 값을 변경할 때 어떤 이유에서든 그것을 선택하고 그 후에 키를 누른 다음 모든 것을 지 웁니다.

이 작업을 수행하는 방법을 알고 있다면 jQuery와 같은 javascript 플러그인을 사용하지 마십시오. 고맙습니다.

+1

경고 단어 : 이것은 올바르게하기가 정말로 어렵습니다. 입력 중간에 마우스를 클릭하고 숫자를 추가하면 어떻게됩니까? 커서를 어딘가에 옮기고 붙여 넣기를 누르십시오. 실행 취소 및 다시 실행에서 얼마나 잘 작동할까요? 올바르게 입력 된 문자 시퀀스를 수락하는 것보다 키보드 입력을 처리하는 것이 훨씬 더 많습니다. – RichieHindle

답변

40

정수 부동 소수점 숫자

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 하나를 사용 떠 것인지 확실하지 않은 경우

...

18

가장 쉬운 방법 :

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 
,210
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 

당신은 대신에 '의', '하려면'

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 "은 ','대신 ','로 숫자를 나눕니다.

+0

훌륭한 솔루션! – ChangeTheWay

+0

답답합니다! 감사! –

관련 문제