2011-11-26 77 views
46

建議用javascript,jquery從數字(任意字符串)去除或截斷前導零的解決方案。用javascript/jquery去除/截斷前導零點

+3

當字符串爲「000000000」時應該發生什麼 – robert

+0

該數字應該始終爲整數,還是應該處理帶小數的數字(例如, ''00000.5'')? – CMS

+0

它應該給任何字符串的工作。即「00000evsdd」應該給「evsdd」,「00000.5」應該給「.5」 –

回答

121

您可以使用在字符串開始處匹配零一個正則表達式:

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

@SomnathMuluk:這將是很多JavaScript程序員的驚喜! – Bert

+0

@Guffa:我在jQuery代碼中使用它..可能是因爲它可能無法正常工作。 –

+1

@Somnath,jQuery是javascript。如果在JavaScript中有效,它會繼續工作,如果你碰巧也在使用jQuery。 –

2

試試這個,

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

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

更多here

+0

它是有問題的字符串值 –

+0

@SomnathMuluk:什麼問題。這裏是工作示例http://jsfiddle.net/AxeUU/ – Gowri

8

既然你說 「任何字符串」 ,我假設這是你想要處理的字符串。

"00012 34 0000432 0035" 

所以,正則表達式是要走的路:

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

,這將防止 「000000」 價值的損失。

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

你可以看到一個working example here

+2

+1,優秀答案 –

3

我在JavaScript用於截斷前導零該解決方案(數字或任意字符串):

<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> 
+3

這不是很好的代碼。對字符串長度的檢查是完全超級的,它永遠不會被評估爲'false'。不需要使用'9999'作爲'substr'的​​第二個參數。只需使用'while(s.substr(0,1)=='0')s = s.substr(1);'。此外,該代碼片段看起來非常老舊,'script'標籤的'language'屬性已被棄用很長一段時間,並且'script'標籤內部的註釋僅僅用於不理解'script'的瀏覽器標籤,例如Internet Explorer 1.0。 – Guffa

+0

它對我來說工作正常.... – Avinash

9

也許有點晚,但我想補充我的2美分。

如果您的字符串ALWAYS代表一個數字,並且有可能的前導零,則可以使用'+'運算符將字符串簡單地轉換爲數字。

例如

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 

希望它可以幫助別人

+1

介意爲什麼這是downvoted? – DiegoDD

+0

它不適用於大於2^53的值。 (+「009007199254740993」)。toString()將是「9007199254740992」 – madreason

15

我會用數( )功能:

var yourString = "00001"; 
yourString = Number(yourString).toString(); 
+0

它不會與大於2^53的值一起工作。數字(「009007199254740993」)。toString()將爲「9007199254740992」 – madreason

+1

完美答案!!!嘗試添加一些更多的解釋:) – SagarPPanchal

1
parseInt(value) or parseFloat(value) 

這將很好地工作。

0

如果個數爲int使用

"" + parseInt(str) 

如果數字是浮動使用

"" + 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