Xóa / cắt bớt các số không ở đầu bằng javascript / jquery


81

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


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

Số được mong đợi luôn là số nguyên hay nó phải xử lý các số có số thập phân (ví dụ '00000.5')?
Christian C. Salvadó

nó sẽ cung cấp công việc cho bất kỳ chuỗi nào đã cho. tức là "00000evsdd" nên cung cấp cho "evsdd", "00.000,5" nên cung cấp cho" .5"
Somnath Muluk

Câu trả lời:


192

Bạn có thể sử dụng một biểu thức chính quy khớp với các số 0 ở đầu chuỗi:

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

12
@SomnathMuluk: đó sẽ là một điều ngạc nhiên đối với rất nhiều lập trình viên javascript!
Bert

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

2
@Somnath, jQuery LÀ 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.
Abe Miessler

5
Tại sao lại ủng hộ? Nếu bạn không giải thích những gì bạn cho là sai, nó không thể cải thiện câu trả lời.
Guffa

2
s = s.replace (/ ^ 0 + /, '') sẽ chuyển đổi "00" thành "" (chuỗi trống thay vì chuỗi có một số 0 trong), điều này trong hầu hết các trường hợp là không mong muốn, tốt hơn nên đóng gói nó trong một hàm và thêm dòng: if (s == "") s = "0";
Oliver Konig

30

Tôi sẽ sử dụng hàm Number ():

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

Hoặc tôi sẽ nhân chuỗi của mình với 1

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

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

13

Có lẽ hơi muộn, nhưng tôi muốn thêm 2 xu của mình.

nếu chuỗi của bạn LUÔN đại diện cho một số, có thể có các số 0 ở đầu, bạn có thể chỉ cần chuyển chuỗi thành 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 một số và bạn chỉ cần xóa số 0 bằng cách sử dụng các giải pháp khác, nhưng nếu bạn chỉ cần chúng là số, đây là cách ngắn nhất.

và FYI bạn có thể làm ngược lại, buộc các số hoạt động như một chuỗi nếu bạn nối một chuỗi rỗng với chúng, như:

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

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


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

13

Vì bạn đã nói "bất kỳ chuỗi nào", tôi giả sử đây cũng là một chuỗi mà bạn muốn xử lý.

"00012  34 0000432    0035"

Vì vậy, regex là cách để đi:

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

Và điều này sẽ ngăn việc mất giá trị "000000".

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

Bạn có thể xem một ví dụ làm việc tại đây


3

Tôi có giải pháp này để cắt bớt các số 0 ở đầu (số hoặc bất kỳ chuỗi nào) 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>

4
Đó 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 lớn, nó sẽ không bao giờ được đánh giá false. Việc sử dụng 9999làm tham số thứ hai substrlà 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ũ, languagethuộc tính của scriptthẻ đã không còn được sử dụng trong một thời gian dài và việc sử dụng chú thích bên trong scriptthẻ chỉ cần thiết cho các trình duyệt không hiểu scriptthẻ, ví dụ như Internet Explorer 1.0.
Guffa

3
parseInt(value) or parseFloat(value)

Điều này sẽ hoạt động tốt.


Không cho số thập phân mặc dù
sburke0708

@ sburke0708 - Có chứ? Đó là những gì parseFloat làm.
Sinister Beard

2

Thử đi,

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

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

Thêm ở đây


nó đang có vấn đề đối với giá trị chuỗi cho trước
Somnath Muluk

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

2

Chỉ cần thử nhân với một như sau:

"00123" * 1; // Lấy dưới dạng số
"00123" * 1 + ""; // Lấy dưới dạng chuỗi



1

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

"" + parseInt(str)

Nếu số là float, sử dụng

"" + parseFloat(str)

0

Một cách khác mà không cần 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 regex ( jsperf )


0
const input = '0093';
const match = input.match(/^(0+)(\d+)$/);
const result = match && match[2] || input;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.