2011-01-18 7 views
15

은 혼자 남겨 두어야합니다.자바 스크립트 문자열의 처음에 0을 추가하십시오 (최대 길이 4 자)

var number = 120; 

은 "0120"으로 변경해야합니다.

var number = 10; 

은 "0010"으로 변경해야합니다.

var number = 7; 

은 "0007"로 변경해야합니다.

+2

다른 모든 경우를 문자열로 변환하는 것처럼 1310을 "1310"문자열로 변환하지 않으시겠습니까? –

+1

나는 Šime Vidas에 동의한다 - 아래의 나의 대답은 그렇게 할 것이다. –

+0

다음을 참조하십시오. http://stackoverflow.com/questions/1267283/how-can-i-create-a-zerofilled-value-using-javascript – Thai

답변

20
function pad_with_zeroes(number, length) { 

    var my_string = '' + number; 
    while (my_string.length < length) { 
     my_string = '0' + my_string; 
    } 

    return my_string; 

} 
3
function pad(n, len) { 
    return (new Array(len + 1).join('0') + n).slice(-len); 
} 

오래된 IE 버전에서 작동하지 않을 수 있습니다.

+2

+1은 IE 4.0 이후부터 정상적으로 작동합니다. 더 간단한 접근법은 동적 일 필요가 없다면'("0000"+ n) .slice (-4);' –

+0

@Andy 네가 그것을 코딩했다면 아마 나는 단지 문자열을 초기화 할 것이다. 20 또는 30 개의 0을 지정하고 사용하십시오. – Pointy

1

내가 좋아하는 접근 방식은 숫자에 10^N을 더하는 것입니다. 여기서 N은 원하는 0의 개수입니다. 결과 숫자를 문자열로 처리하고 0 번째 자릿수를 잘라냅니다. 물론, 당신은 당신의 입력 번호가 패드의 길이보다 클 수 있습니다 경우 조심해야 할 것입니다,하지만 여전히 루프 방법보다 훨씬 빠르다 :

// You want to pad four places: 
>>> var N = Math.pow(10, 4) 
>>> var number = 1310 
>>> number < N ? ("" + (N + number)).slice(1) : "" + number 
"1310" 
>>> var number = 120 
>>> number < N ? ("" + (N + number)).slice(1) : "" + number 
"0120" 
>>> var number = 10 
>>> number < N ? ("" + (N + number)).slice(1) : "" + number 
"0010" 
… 

등 쉽게 충분한 기능에이를 수 :

/** 
* Pad a number with leading zeros to "pad" places: 
* 
* @param number: The number to pad 
* @param pad: The maximum number of leading zeros 
*/ 
function padNumber(number, pad) { 
    var N = Math.pow(10, pad); 
    return number < N ? ("" + (N + number)).slice(1) : "" + number 
} 
4
//to: 0 - to left, 1 - to right 
String.prototype.pad = function(_char, len, to) { 
    if (!this || !_char || this.length >= len) { 
     return this; 
    } 
    to = to || 0; 

    var ret = this; 

    var max = (len - this.length)/_char.length + 1; 
    while (--max) { 
     ret = (to) ? ret + _char : _char + ret; 
    } 

    return ret; 
}; 

사용법 :

someString.pad(neededChars, neededLength) 

예 :

'332'.pad('0', 6); //'000332' 
'332'.pad('0', 6, 1); //'332000' 
6

다른 방법이 있습니다. 내가 한 일에서 오는 것은 페이지로드시 수천 번 수행해야합니다. 한 번 열을 0으로 하드 코딩하는 것은 꽤 CPU 효율이 좋으며 필요한만큼 여러 번 패드에 필요한만큼 잘라 낼 수 있습니다. 나는 정말 10 가지 방법의 힘을 좋아합니다 - 꽤 유연합니다. 사례 중 하나를 선택하여 원래의 질문에 대한

, ... 다음

var number = 1310; 
var number = 120; 
var number = 10; 
var number = 7; 

// only needs to happen once 
var zeroString = "00000"; 

// one assignment gets the padded number 
var paddedNum = zeroString.substring((number + "").length, 4) + bareNum; 

//output 
alert("The padded number string is: " + paddedNum); 
: 내가 가지고 올 수 어쨌든

,이 효율적이다

물론 입력을 확인해야합니다. 이 내용은 다음과 같은 조건에서 안정적으로 작동하기 때문에 :

zeroString에서 제로의
  • 번호는 시작 번호의 자릿수 desired_length + 1
  • 수 원하는 길이보다 작거나 같은입니다

뒷 이야기 :

나는 고정 길이 (14 자리) 제로 패딩 번호가 필요한 경우가 있습니다. 나는 이것을 어떻게 만들 수 있는지를 알고 싶었다.페이지로드시 수만 번 실행되므로 효율성이 중요합니다. 그것은 그대로 재사용이 가능하지 않으며, 조금 비 효과적입니다. 그것을 제외하고 그것은 매우 간단합니다.

원하는 n 자리 수의 패딩 된 문자열의 경우이 메서드에는 (적어도) n + 1 개의 0 문자열이 필요합니다. 인덱스 0은 문자열의 첫 번째 문자입니다. 사용되지 않을 것이므로 실제로는 아무 것도 될 수 있습니다.

참고 또한 string.substring()string.substr() 다르다!

var bareNum = 42 + ''; 
var zeroString = "000000000000000"; 
var paddedNum = zeroString.substring(bareNumber.length, 14) + bareNum 

이 문자열의 길이와 일치하는 위치에서 시작 zeroString에서 제로 당긴, 세번째 줄만큼이 "14"로 (14)의 필요한 길이로 제로를 얻기 위해 계속 낮은 정수 zeroString의 문자 수보다 많으면 작동합니다.

-1

사용 String.JS librairy 기능 padLeft : 모든 최신 브라우저에서

S('123').padLeft(5, '0').s --> 0