2011-11-26 35 views
46

Đề xuất giải pháp loại bỏ hoặc cắt bớt số 0 đứng đầu khỏi số (bất kỳ chuỗi nào) bằng javascript, jquery.Xóa/cắt bớt các số 0 đứng đầu bằng javascript/jquery

+3

điều gì sẽ xảy ra khi chuỗi là "000000000" – robert

+0

Số có được mong đợi là số nguyên luôn hay không, hoặc số đó sẽ xử lý các số có số thập phân (ví dụ: ''00000.5'')? – CMS

+0

nó sẽ cung cấp cho công việc cho bất kỳ chuỗi nào được cung cấp. tức là "00000evsdd" phải cung cấp "evsdd", "00000.5" sẽ cung cấp ".5" –

Trả lời

121

Bạn có thể sử dụng một biểu thức chính quy phù hợp với zero vào đầu chuỗi:

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

@SomnathMuluk: điều đó sẽ gây bất ngờ cho rất nhiều lập trình viên javascript! – Bert

+0

@Guffa: Tôi đang sử dụng nó trong mã jquery .. có thể là do nó có thể không hoạt động. –

+1

@Somnath, jQuery IS javascript. Nếu một cái gì đó hoạt động trong javascript nó sẽ tiếp tục hoạt động nếu bạn cũng đang sử dụng jQuery. –

2

Hãy thử điều này,

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

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

More here

+0

nó đang gặp vấn đề đối với chuỗi giá trị được đưa ra –

+0

@SomnathMuluk: vấn đề gì. đây là ví dụ làm việc http://jsfiddle.net/AxeUU/ – Gowri

8

Vì bạn nói "bất kỳ chuỗi" , Tôi giả định đây là một chuỗi bạn muốn xử lý, quá.

"00012 34 0000432 0035" 

Vì vậy, regex là con đường để đi:

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

Và điều này sẽ ngăn chặn sự mất mát của một giá trị "000000".

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

Bạn có thể thấy một working example here

+2

+1, câu trả lời tuyệt vời –

3

tôi có giải pháp này cho cắt bỏ số không hàng đầu (số hay bất kỳ chuỗi) trong 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

Đó không phải là mã rất tốt. Việc kiểm tra độ dài chuỗi là hoàn toàn siêu, nó sẽ không bao giờ được đánh giá thành 'false'. Việc sử dụng '9999' làm tham số thứ hai cho' substr' là không cần thiết. Chỉ cần sử dụng 'while (s.substr (0,1) == '0') s = s.substr (1);'. Bên cạnh đó, đoạn mã đó trông thực sự cũ, thuộc tính 'language' của thẻ' script' đã không còn được dùng trong một thời gian dài và việc sử dụng các nhận xét bên trong thẻ 'script' chỉ cần cho các trình duyệt không hiểu' script' ở tất cả, ví dụ Internet Explorer 1.0. – Guffa

+0

Nó đang làm việc tốt cho tôi .... – Avinash

9

lẽ muộn một chút, nhưng tôi muốn thêm 2 cent của tôi.

nếu chuỗi của bạn LUÔN đại diện cho một số, với số 0 đứng đầu có thể, bạn có thể chỉ cần truyền chuỗi đến một số bằng cách sử dụng toán tử '+'.

ví dụ:

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) 

nếu chuỗi của bạn không đại diện cho số và bạn chỉ cần xóa 0 sử dụng các giải pháp khác, nhưng nếu bạn chỉ cần số 0 thì đây là cách ngắn nhất.

và FYI bạn có thể làm, số lực lượng đối lập để hoạt động như chuỗi nếu bạn nối một chuỗi rỗng đối với họ, như:

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

hy vọng nó sẽ giúp ai đó

+1

tâm nói lý do tại sao điều này đã được downvoted? – DiegoDD

+0

nó sẽ không hoạt động với giá trị lớn hơn 2^53. (+ "009007199254740993"). ToString() sẽ là "9007199254740992" – madreason

15

Tôi sẽ sử dụng Number () chức năng:

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

nó sẽ không hoạt động với giá trị lớn hơn 2^53. Số ("009007199254740993"). ToString() sẽ là "9007199254740992" – madreason

+1

câu trả lời hoàn hảo !!! cố gắng thêm một số giải thích thêm :) – SagarPPanchal

1
parseInt(value) or parseFloat(value) 

này sẽ làm việc độc đáo.

0

Nếu số là int sử dụng

"" + parseInt(str) 

Nếu số là sử dụng phao

"" + parseFloat(str) 
0

Một cách khác mà không regex:

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

Với chuỗi ngắn nó sẽ nhanh hơn nhiều so với regex (jsperf)

Các vấn đề liên quan