Значение поля ввода - удалить ведущие нули

У меня есть текстовое поле в Javascript. Когда я ввожу '0000.00' в текстовое поле, я хочу знать, как преобразовать это в наличие только одного начального нуля, например '0.00'.


person Community    schedule 27.02.2009    source источник
comment
Нужно уточнить, что такое строка. Если ваша строка представляет собой десятичное число, то ответ будет другим, чем если бы ваша строка была текстовой строкой. 00000.000 -> 0.000 будет десятичным преобразованием. 000TXT10001 -> 0TXT10001 потребует функции обрезки. Например, что вы ожидаете, когда ввод 0011.1100 -> 011.1100 или 11.11?   -  person ChronoFish    schedule 15.10.2012


Ответы (8)


Более упрощенное решение приведено ниже. Проверь это!

var resultString = document.getElementById("theTextBoxInQuestion")
                           .value
                           .replace(/^[0]+/g,"");
person Community    schedule 12.08.2009
comment
@MikeM, тогда ты мог бы использовать replace(/^[0]+/g, "0") - person Andrew Tobilko; 20.08.2016

Похоже, вы просто хотите удалить ведущие нули, если не осталось только одного («0» для целого числа или «0.xxx» для числа с плавающей запятой, где x может быть любым).

Это должно быть хорошо для первого разреза:

while (s.charAt(0) == '0') {            # Assume we remove all leading zeros
    if (s.length == 1) { break };       # But not final one.
    if (s.charAt(1) == '.') { break };  # Nor one followed by '.'
    s = s.substr(1, s.length-1)
}
person paxdiablo    schedule 27.02.2009
comment
Это хорошее решение. Полагаться на встроенные функции — не всегда лучший вариант. Я бы превратил это во вспомогательную функцию, которая принимает строковый аргумент и возвращает отформатированную строку. - person Kaleb Anderson; 21.01.2016
comment
Работает очень хорошо для меня. Я бы просто посоветовал добавить кусок кода для поддержки отрицательных чисел (с - в первом символе). - person Gaston; 28.11.2017

Вы можете использовать этот код:

<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>
person Somnath Muluk    schedule 26.11.2011

Хорошо, простое решение. Единственная проблема заключается в том, что когда строка "0000.00" приводит к простому 0. Но помимо этого я думаю, что это отличное решение.

var i = "0000.12";
var integer = i*1; //here's is the trick...
console.log(i); //0000.12
console.log(integer);//0.12

В некоторых случаях, я думаю, это может сработать...

person ncubica    schedule 05.06.2013

Попробуй это:

<input type="text" onblur="this.value=this.value.replace(/^0+(?=\d\.)/, '')">
person Gumbo    schedule 27.02.2009

Вы можете использовать регулярное выражение, чтобы заменить начальные нули одним:

valueString.replace(/^(-)?0+(0\.|\d)/, '$1$2')

>'-000.0050'.replace(/^(-)?0+(0\.|\d)/, '$1$2')
< "-0.0050"
>'-0010050'.replace(/^(-)?0+(0\.|\d)/, '$1$2')
< "-10050"

Совпадений: <beginning of text><optional minus sign><any sequence of zeroes><either a zero before the dot or another digit>

Заменяется на: <same sign if available><the part of the string after the sequence of zeroes>

  • ^ — начало текста

  • ? означает необязательный (относится к предыдущему символу)

  • (a|b) означает либо a, либо b

  • . это точка (экранированная, поскольку . имеет особое значение)

  • \d - любая цифра

  • $1 означает, что вы нашли в первом наборе ()

  • $2 означает, что вы нашли во втором наборе ()

введите здесь описание изображения

person Pietro    schedule 17.10.2018
comment
Не могли бы вы уточнить. И можно ли не выкладывать фото? Ссылки на изображения могут разорваться, а текст останется всегда. - person DarkMukke; 17.10.2018

person    schedule
comment
Действительно отличное решение, которое я ищу - person Krishna Jonnalagadda; 06.03.2019
comment
@MikeM Может кто-нибудь уточнить? Из моего понимания регулярных выражений и с regexr.com/4tn79 используемое регулярное выражение не соответствует нулю в 3-м примере, но функция действительно работает для всех примеров (с использованием Chrome). Итак, как работает 3-й пример, если регулярное выражение не соответствует правильно?! И как я могу быть уверен, что он всегда будет работать? - person jneuendorf; 06.02.2020

person    schedule
comment
Вызывает ли это какие-либо проблемы, если количество нулей слева от десятичной дроби очень велико? - person Eric; 02.12.2010
comment
Эрик прав, это сработает, только если у вас один ноль в начале. Еще больше и провал. - person Julian Young; 29.09.2011