Видалення / обрізання початкових нулів за допомогою javascript / jquery


85

Запропонуйте рішення для видалення або обрізання початкових нулів від числа (будь-якого рядка) за допомогою javascript, jquery.


4
що має статися, коли рядок "000000000"
Роберт

Чи очікується, що число завжди буде цілим числом, чи воно має обробляти числа з десятковими цифрами (наприклад '00000.5')?
Крістіан Сальвадо,

це має дати роботу для будь-якого заданого рядка. тобто "00000evsdd" повинен дати "evsdd", "00000.5" повинен дати ".5"
Somnath Muluk

Відповіді:


197

Ви можете використовувати регулярний вираз, який відповідає нулям на початку рядка:

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

13
@SomnathMuluk: це буде несподіванкою для багатьох програмістів javascript!
Берт

@Guffa: Я використовую його в коді jquery .. можливо, через це він може не працювати.
Somnath Muluk

2
@Somnath, jQuery Є javascript. Якщо щось працює в javascript, воно буде продовжувати працювати, якщо ви також використовуєте jQuery.
Abe Miessler,

5
Чому голос проти? Якщо ви не поясніть, що, на вашу думку, неправильне, це не може покращити відповідь.
Гуффа

2
s = s. додати рядок: if (s == "") s = "0";
Олівер Кеніг

31

Я б використовував функцію Number ():

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

Або я б помножив свій рядок на 1

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

2
він не працюватиме зі значенням більше 2 ^ 53. Номер ("009007199254740993"). ToString () буде "9007199254740992"
madreason

13

Можливо, трохи пізно, але я хочу додати свої 2 центи.

якщо ваш рядок ЗАВЖДИ представляє число, з можливими початковими нулями, ви можете просто передати рядок у число за допомогою оператора '+'.

напр

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, використовуйте інші рішення, але якщо вони вам потрібні лише як число, це найкоротший шлях.

і FYI, ви можете зробити навпаки, змусити числа діяти як рядки, якщо зв’язати з ними порожній рядок, наприклад:

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

Я отримав це рішення для обрізання початкових нулів (числа або будь-якого рядка) у 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
Це не дуже хороший код. Перевірка довжини рядка абсолютно надзвичайна, вона ніколи не буде оцінена false. Використання 9999як другого параметра для substrне потрібно. Просто використовуйте while (s.substr(0,1) == '0') s = s.substr(1);. Крім того, цей фрагмент коду виглядає по-справжньому старим, languageатрибут scriptтегу вже давно застарілий, і використання коментарів всередині scriptтегів потрібно лише для браузерів, які взагалі не розуміють scriptтег, наприклад Internet Explorer 1.0.
Гуффа 01.03.12


2

Спробуйте це,

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

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

Більше тут


у нього проблема із заданим значенням рядка
Somnath Muluk

@SomnathMuluk: яка проблема. ось робочий приклад jsfiddle.net/AxeUU
Gowri

2

Просто спробуйте помножити на одиницю наступним чином:

"00123" * 1; // Отримати як номер
"00123" * 1 + ""; // Отримати як рядок


1

Ви повинні використовувати параметр "radix" функції "parseInt": https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt?redirectlocale=en-US&redirectslug=JavaScript%2FReference % 2FGlobal_Objects% 2FparseInt

parseInt ('015', 10) => 15

якщо ви не використовуєте його, якийсь механізм javascript може використовувати його як вісімковий parseInt ('015') => 0


1

Якщо число - це 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 )


0
const input = '0093';
const match = input.match(/^(0+)(\d+)$/);
const result = match && match[2] || input;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.