javascript / jquery로 선행 0 제거 / 자르기


85

javascript, jquery로 숫자 (모든 문자열)에서 선행 0을 제거하거나 잘라 내기위한 솔루션을 제안합니다.


4
문자열이 "000000000"이면 어떻게 되나요?
robert

숫자는 항상 정수 여야 '00000.5'합니까 , 아니면 소수로 처리해야 합니까 (예 :) ?
Christian C. Salvadó 2011

주어진 모든 문자열에 대해 작동해야합니다. 즉, "00000evsdd"는 "evsdd", "00000.5"는 ".5"를 제공해야합니다
Somnath Muluk

답변:


197

문자열 시작 부분에서 0과 일치하는 정규식을 사용할 수 있습니다.

s = s.replace(/^0+/, '');

13
@SomnathMuluk : 많은 자바 스크립트 프로그래머들에게는 놀라운 일입니다!
Bert

@Guffa : jquery 코드에서 사용하고 있습니다. 작동하지 않을 수 있기 때문일 수 있습니다.
Somnath Muluk 2011

2
@Somnath, jQuery는 자바 스크립트입니다. 자바 스크립트에서 작동하는 것이 있으면 jQuery를 사용하는 경우에도 계속 작동합니다.
Abe Miessler 2011

5
왜 반대 투표입니까? 잘못되었다고 생각하는 것을 설명하지 않으면 답을 개선 할 수 없습니다.
Guffa

2
s = s.replace (/ ^ 0 + /, '')는 "00"을 ""(1 개의 0이있는 문자열 대신 빈 문자열)로 변환합니다. 대부분의 경우 바람직하지 않으며 함수에 더 잘 캡슐화합니다. 줄 추가 : if (s == "") s = "0";
Oliver Konig

31

Number () 함수를 사용합니다.

var str = "00001";
str = Number(str).toString();
>> "1"

또는 문자열에 1을 곱합니다.

var str = "00000000002346301625363";
str = (str * 1).toString();
>> "2346301625363"

2
2 ^ 53보다 큰 값에서는 작동하지 않습니다. Number ( "009007199254740993"). toString ()은 "9007199254740992"가됩니다
madreason

13

조금 늦을 수도 있지만 2 센트를 더하고 싶습니다.

문자열이 항상 앞에 0이있는 숫자를 나타내는 경우 '+'연산자를 사용하여 문자열을 숫자로 간단히 캐스트 할 수 있습니다.

예 :

x= "00005";
alert(typeof x); //"string"
alert(x);// "00005"

x = +x ; //or x= +"00005"; //do NOT confuse with x+=x, which will only concatenate the value
alert(typeof x); //number , voila!
alert(x); // 5 (as number)

문자열이 숫자를 나타내지 않고 0 만 제거하면 다른 솔루션을 사용하지만 숫자로만 필요한 경우 가장 짧은 방법입니다.

참고로 반대로 다음과 같이 빈 문자열을 연결하면 숫자가 문자열로 작동하도록 할 수 있습니다.

x = 5;
alert(typeof x); //number
x = x+"";
alert(typeof x); //string

누군가에게 도움이되기를 바랍니다


2 ^ 53보다 큰 값에서는 작동하지 않습니다. (+ "009007199254740993"). toString ()은 "9007199254740992"가됩니다
madreason

13

"모든 문자열"이라고 말 했으므로이 문자열도 처리하려는 문자열이라고 가정합니다.

"00012  34 0000432    0035"

따라서 정규식이 갈 길입니다.

var trimmed = s.replace(/\b0+/g, "");

그리고 이것은 "000000"값의 손실을 방지합니다.

var trimmed = s.replace(/\b(0(?!\b))+/g, "")

여기 에서 작동하는 예를 볼 수 있습니다.


3

자바 스크립트에서 선행 0 (숫자 또는 모든 문자열)을 자르는이 솔루션을 얻었습니다.

<script language="JavaScript" type="text/javascript">
<!--
function trimNumber(s) {
  while (s.substr(0,1) == '0' && s.length>1) { s = s.substr(1,9999); }
  return s;
}

var s1 = '00123';
var s2 = '000assa';
var s3 = 'assa34300';
var s4 = 'ssa';
var s5 = '121212000';

alert(s1 + '=' + trimNumber(s1));
alert(s2 + '=' + trimNumber(s2));
alert(s3 + '=' + trimNumber(s3));
alert(s4 + '=' + trimNumber(s4));
alert(s5 + '=' + trimNumber(s5));
// end hiding contents -->
</script>

4
그다지 좋은 코드가 아닙니다. 문자열 길이에 대한 검사는 완전히 수 퍼플 로스이며 절대로 평가되지 않습니다 false. 의 9999두 번째 매개 변수로 substr사용할 필요가 없습니다. 사용하십시오 while (s.substr(0,1) == '0') s = s.substr(1);. 게다가이 코드 조각은 정말 오래 되어 보였고 태그 의 language속성 script은 오랫동안 사용되지 않았 으며 태그 내부에 주석을 사용 script하는 것은 scriptInternet Explorer 1.0과 같이 태그를 전혀 이해하지 못하는 브라우저에만 필요합니다 .
Guffa


2

이 시도,

   function ltrim(str, chars) {
        chars = chars || "\\s";
        return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
    }

    var str =ltrim("01545878","0");

여기


주어진 문자열 값에 문제가 있습니다
Somnath Muluk 2011

@SomnathMuluk : 무슨 문제. 다음은 작업 예제입니다. jsfiddle.net/AxeUU
Gowri

2

다음과 같이 간단히 곱해보십시오.

"00123"* 1; // 숫자
"00123"* 1 + ""로 가져옵니다. // 문자열로 가져 오기



1

숫자가 int 사용이면

"" + parseInt(str)

숫자가 float 인 경우

"" + parseFloat(str)

0

정규식이없는 또 다른 방법 :

function trimLeadingZerosSubstr(str) {
    var xLastChr = str.length - 1, xChrIdx = 0;
    while (str[xChrIdx] === "0" && xChrIdx < xLastChr) {
        xChrIdx++;
    }
    return xChrIdx > 0 ? str.substr(xChrIdx) : str;
}

짧은 문자열을 사용하면 정규식 ( jsperf ) 보다 더 빠릅니다.


0
const input = '0093';
const match = input.match(/^(0+)(\d+)$/);
const result = match && match[2] || input;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.