2013-07-31 2 views
0

매번 사용자가 내가 매 3 개 문자 점, 예를 들어 추가 버튼을 원하는 프레스 : 어떻게 입력 필드에 형식을 지정할 수 있습니까?

123 
123.456 
12.345.678 

내가이 매번 키를 누를 때 무슨 일이 생긴 싶지을, 이것은 내가 무엇을 가지고 있지만, 행운 ...

function format_num(input) { 
    str = input.value; 
    str.replace(/(.{3})/,'$1.') 
    input.value = str; 
} 

<input type="text" name="num" id="num" onKeyPress="format_num(this)"> 
+0

http://jsfiddle.net/은 대체 전화는 세 문자의 첫 번째 항목을 대체 할 것입니다 자바 스크립트 코드 – tobspr

+0

한 가지 문제를 제시 할 수있는 아주 좋은 플랫폼입니다. 두 번째 슬래시 뒤에 문자 g를 추가하면 반복적으로 바뀝니다 (3 자의 배수가 있으면 끝에 점이 추가됩니다). – tuckermi

+0

질문의 제목이 질문의 텍스트와 일치하지 않습니다. 왜 이렇게하고 싶은지도 명확하지 않습니다. 즉, 잘못된 문제를 해결할 수 있습니다. 자동으로 문자를 삽입하여 사용자 입력을 방해하는 것은 일반적으로 좋지 않습니다. –

답변

1

먼저 정규 표현식 뒤에 세미콜론이 누락되었습니다. 둘째, g 수정자를 추가하여 첫 번째 일치에서 중지하는 대신 모든 일치 항목을 찾아야합니다. 또한 .replace()의 결과를 변수에 할당하십시오 (심지어 str). 자바 스크립트에서 문자열 immutable이기 때문에

str = str.replace(/(.{3})/g,"$1."); 

은이 모든 String 방법은 실제로 내용 문자열을 변경할 수 있지만, 새로운 수정 문자열을 반환하지 않는 것을 의미한다.

마지막으로 한 가지주의해야 할 점은 점을 추가 할 때 점 사이에 점을 추가하므로이 정규식이 더 이상 작동하지 않는다는 것입니다.

문자열의 점을 계산하지 않아야합니다. Regex를 실행하기 전에 변수를 수정하면됩니다. 이 라인에 뭔가 :

str = str.split('.').join(''); 

Working example

0

이것은 내가 게시 한 가장 끔찍한 읽을 대답이지만 어떤 번호, 작업을 수행합니다.

var num = 12345678; 
var formatted = num.toString().replace(/./g, function(num) { return num+'|'; }).split('|').reverse().join('').replace(/\d{3}/g, function(nums) { return nums+'.'; }).replace(/./g, function(num) { return num+'|'; }).split('|').reverse().join('').replace(/^\./, ''); 

당신은 오른쪽에서 왼쪽으로 스캔해야 12.345.678

+0

그냥 궁금해서 : 한 줄짜리 숫자를 음수로 수정할 수 있습니까? –

+0

Yeap. 첫 번째 일치에서 '\ d'를 임의의 문자 (즉 '-')와 일치하도록 변경했습니다. – Utkanos

0

생성합니다. 더 읽기 쉬운 (Utkanos에 비해) 솔루션은

function format_num(input) { 
    var inStr = input.value.replace(/\./, ''); 
    var outStr = ''; 
    for (var count=0, i=inStr.length-1; i>=0; i--, count++) { 
     if (count && count % 3 == 0) outStr = '.' + outStr; 
     outStr = inStr.charAt(i) + outStr; 
    } 

    input.value = outStr; 
} 
0

나는 완벽하게 작동하는 스크립트를 발견했습니다! 나는 약간의 이슈를 가지고 있었기 때문에 나는이 작품을 보았다. 어쨌든 고마워 !!

function formatNumber(originalValue){ 

    originalValue = (originalValue != null ? originalValue.toString() : "0"); 

    var nStr = originalValue.replace(/\./g, ""); 
    var jj=0; 
    var leftNumbers = 0; 

    var x = nStr.split(','); 
    var x1 = x[ 0 ]; 
    var x2 = x.length > 1 ? ',' + x[ 1 ] : ''; 
    var rgx = /(\d+)(\d{3})/; 

    while(rgx.test(x1)){ 
     x1 = x1.replace(rgx, '$1' + '.' + '$2'); 
    } 

    nStr = x1 + x2; 

    for(jj=0; leftNumbers>0; jj++){ 

     if(/[0-9]/.test(nStr.toString().substring(jj, (jj + 1)))) 
      leftNumbers--; 

    } 

    if(originalValue == nStr) 
     return originalValue; 

    return nStr; 
} 
관련 문제