jQuery를 사용하여 숫자 앞에 추가 0을 추가 하시겠습니까?


81

다음과 같은 형식으로 업로드 된 파일이 있습니다.

미스터 1

미스터 2

씨 100

씨 200

씨 300

기타.

내가해야 할 일은 MR 10 이전에 00을 추가하고 MR10-99 이전에 0을 하나 더 추가하는 것입니다.

따라서 파일은 형식이 지정됩니다.

씨 001

씨 010

MR 076

기타.

어떤 도움이라도 좋을 것입니다!


3
jQuery는 여기서 당신을 돕지 않을 것입니다 (적어도 포맷팅에 대해서는 아닙니다) ...하지만 파일에 어떻게 접근합니까? 그 내용을 어떻게 얻습니까? 어떻게 든 문맥이 명확하지 않습니다. 문제를 더 잘 이해할 수 있도록 최소한 몇 개의 코드를 제공하십시오.
Felix Kling 2011-06-24

@FelixKling 파일이 관련이 없습니다. 그는 서식에 대해 묻고 있습니다.
felwithe

답변:


214

해당 값이 일부 문자열에 저장되어 있다고 가정하면 다음을 시도하십시오.

function pad (str, max) {
  str = str.toString();
  return str.length < max ? pad("0" + str, max) : str;
}

pad("3", 3);    // => "003"
pad("123", 3);  // => "123"
pad("1234", 3); // => "1234"

var test = "MR 2";
var parts = test.split(" ");
parts[1] = pad(parts[1], 3);
parts.join(" "); // => "MR 002"

3
나는 이것이 오래되었다는 것을 알고 있지만,이 기능은 나를 도왔고 나는 그것에 추가 할 것이라고 생각했다. 이것은 정수 또는 부동 변수에 대한 유형 변환을 수행 pad(85, 5)하므로 pad("85", 5). return (str).toString().length < max ? pad("0" + (str).toString(), max) : (str).toString();
Rémi Breton

7
@ RémiBreton 함수가 너무 많이 사용됩니다 .toString(). 나는 그것이 더 나을 것이라고 생각한다function pad (str, max) { str=str.toString(); function main(str,max){ return str.length < max ? main("0" + str, max) : str; } return main(str,max); }
Oriol

2
String.prototype.padLeft = function padLeft (length, leadingChar) {if (leadingChar === undefined) leadingChar = "0"; return this.length <length? (leadingChar + this) .padLeft (length, leadingChar) : this; };
Tim Valentine

34

나는 관련이 있다고 생각하는 잠재적 솔루션이 있으며 여기에 게시했습니다.

https://www.facebook.com/antimatterstudios/posts/10150752380719364

기본적으로 최소 길이는 2 개 또는 3 개입니다.이 코드에 0을 몇 개 넣을지 조정할 수 있습니다.

var d = new Date();
var h = ("0"+d.getHours()).slice(-2);
var m = ("0"+d.getMinutes()).slice(-2);
var s = ("0"+d.getSeconds()).slice(-2);

나는 항상 하나의 정수를 최소값 (1 시간, 2 시간) 등으로 얻을 수 있다는 것을 알았지 만, 빈 문자열 외에는 아무것도 얻을 수 없다면 "000"+ d.getHours ( ) 최소값을 얻으십시오.

그러면 3 개의 숫자를 원하십니까? 내 코드에서 -2 대신 -3을 사용합니다. 저는 24 시간 시계를 아주 쉽게 만들고 싶었 기 때문에 이것을 작성하고 있습니다.


21

참고 : 최신 ECMAScript를 사용하는 경우 업데이트 2를 참조하십시오 .


비슷한 질문에 대한 답변 에서 단순함으로 좋아하는 솔루션이 있습니다 .

var n = 123

String('00000' + n).slice(-5); // returns 00123
('00000' + n).slice(-5);       // returns 00123

최신 정보

@RWC가 제안했듯이 다음과 같은 일반 함수로 멋지게 래핑 할 수 있습니다.

function leftPad(value, length) { 
    return ('0'.repeat(length) + value).slice(-length); 
}

leftPad(123, 5); // returns 00123

슬라이스가 마음에 들지 않는 분들을 위해 :

function leftPad(value, length) {
    value = String(value);
    length = length - value.length;
    return ('0'.repeat(length) + value)
}

그러나 성능이 중요하다면 제안 된 솔루션 중 하나를 선택하기 전에 연결된 답변을 읽는 것이 좋습니다.

업데이트 2

ES6에서 String 클래스는 이제 padStart문자열에 선행 문자를 추가 하는 내장 메소드 와 함께 제공됩니다 . 대한 참조는 여기 에서 MDN을 확인하십시오String.prototype.padStart() . 그리고 padEnd문자를 끝내는 방법 도 있습니다 .

따라서 ES6에서는 다음과 같이 간단 해졌습니다.

var n = 123;
n.padStart(5, '0'); // returns 00123

3
개선 된 버전 : function leftPad (value, maxLength) {return String ( '0'.repeat (maxLength) + value) .slice (-maxLength); }
RWC

7
function addLeadingZeros (n, length)
{
    var str = (n > 0 ? n : -n) + "";
    var zeros = "";
    for (var i = length - str.length; i > 0; i--)
        zeros += "0";
    zeros += str;
    return n >= 0 ? zeros : "-" + zeros;
}

//addLeadingZeros (1, 3) =   "001"
//addLeadingZeros (12, 3) =  "012"
//addLeadingZeros (123, 3) = "123"

즉, 문자열로 변환 한 다음 0으로 채 웁니다 .
pavium 2011 년

4

이것은 일반적으로 코드에서 숫자 또는 문자열 앞에 0을 추가하는 데 사용하는 함수입니다.

입력은 문자열 또는 숫자 (str) 및 원하는 출력 길이 (len)입니다.

var PrependZeros = function (str, len) {
    if(typeof str === 'number' || Number(str)){
    str = str.toString();
    return (len - str.length > 0) ? new Array(len + 1 - str.length).join('0') + str: str;
}
else{
    for(var i = 0,spl = str.split(' '); i < spl.length; spl[i] = (Number(spl[i])&& spl[i].length < len)?PrependZeros(spl[i],len):spl[i],str = (i == spl.length -1)?spl.join(' '):str,i++);
    return str;
}

};

예 :

PrependZeros('MR 3',3);    // MR 003
PrependZeros('MR 23',3);   // MR 023
PrependZeros('MR 123',3);  // MR 123
PrependZeros('foo bar 23',3);  // foo bar 023

2

공백으로 분할하는 경우 다음과 같은 간단한 함수를 사용하여 선행 0을 추가 할 수 있습니다.

function addZeros(n) {
  return (n < 10)? '00' + n : (n < 100)? '0' + n : '' + n;
}

따라서 문자열의 길이를 테스트하고 6보다 작 으면 공백을 분할하고 숫자에 0을 더한 다음 다시 합칠 수 있습니다.

또는 정규 표현식으로 :

function addZeros(s) {
  return s.replace(/ (\d$)/,' 00$1').replace(/ (\d\d)$/,' 0$1');
}

나는 누군가가 두 개가 아닌 한 번의 교체로 할 수 있다고 확신합니다.

편집-예

alert(addZeros('MR 3'));    // MR 003
alert(addZeros('MR 23'));   // MR 023
alert(addZeros('MR 123'));  // MR 123
alert(addZeros('foo bar 23'));  // foo bar 023

문자열 끝에 공백이있는 숫자 앞에 하나 또는 두 개의 0을 넣습니다. 공간이 어떤 비트인지 상관하지 않습니다.


문서에 MR 003이있는 경우 누군가 0을 추가하는 것을 무시할 수 있다고 말하면 어떻게됩니까?
Chill Web Designs

2

웃기만해도 길고 험악한 방식으로하세요 .... :
(참고 : 이걸 사용하지 않았고, 이걸 사용하는 것을 권하지 않을 것입니다.!)

function pad(str, new_length) {
    ('00000000000000000000000000000000000000000000000000' + str).
    substr((50 + str.toString().length) - new_length, new_length)
}

1

나는 요 전에 이런 것이 필요했습니다. 항상 0이 아닌 Pud가 앞을 패딩하고 싶었던 것을 말할 수 있기를 원했습니다. 다음은 내가 코드를 위해 생각 해낸 것입니다.

function lpad(n, e, d) {
  var o = ''; if(typeof(d) === 'undefined'){ d='0'; } if(typeof(e) === 'undefined'){ e=2; }
  if(n.length < e){ for(var r=0; r < e - n.length; r++){ o += d; } o += n; } else { o=n; }
  return o; }

여기서 n은 패딩하려는 값이고, e는 패딩하려는 거듭 제곱 (길이 여야하는 문자 수)이고, d는 패딩하려는 값입니다. 내가 필요로하는 것에 대해 잘 작동하는 것 같지만 "d"가 한 문자 이상이면 실패하는 경우가 있습니다.



1

str은 숫자 또는 문자열 일 수 있습니다.

formatting("hi",3);
function formatting(str,len)
{
   return ("000000"+str).slice(-len);
}

큰 숫자가 필요한 경우 0을 더 추가하십시오.


0

간단히 말해서 다음과 같이 작성할 수 있습니다.

for(var i=1;i<=31;i++)
    i=(i<10) ? '0'+i : i;

// 일, 월 또는 금액에 필요한 대부분의 시간이 중요하기 때문입니다.


0

이것이 오래된 게시물이라는 것을 알고 있지만 여기에 또 다른 짧고 효과적인 방법이 있습니다. 0

편집하다 : dur. num이 문자열이 아니면 다음을 추가합니다.

len -= String(num).length;

그렇지 않으면 다 좋다

function addLeadingZeros(sNum, len) {
    len -= sNum.length;
    while (len--) sNum = '0' + sNum;
    return sNum;
}

0

숫자에 100을 더한 다음 인덱스 1에서 오른쪽의 마지막 위치까지 하위 문자열 함수를 실행합니다.

var dt = new Date();
var month = (100 + dt.getMonth()+1).toString().substr(1, 2);
var day = (100 + dt.getDate()).toString().substr(1, 2);

console.log(month,day);

이 결과는 2020-11-3 날짜에서 얻을 수 있습니다.

11,03

답변이 도움이 되었기를 바랍니다.


-1

다음을 시도하면 0을 접두사로 지정하여 한 자리 및 두 자리 숫자를 3 자리 숫자로 변환합니다.

var base_number = 2;
var zero_prefixed_string = ("000" + base_number).slice(-3);

이 코드는 질문에 대한 해결책을 제공 할 수 있지만 작동 이유 / 방법에 대한 컨텍스트를 추가하는 것이 좋습니다. 이것은 미래의 사용자가 그 지식을 배우고 자신의 코드에 적용하는 데 도움이 될 수 있습니다. 또한 코드가 설명 될 때 사용자로부터 찬성 투표 형태로 긍정적 인 피드백을받을 가능성이 있습니다.
borchvm

그에 따라 기록되고 수정되었습니다.
vivek shirodkar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.