Значение поля ввода - убрать начальные нули - PullRequest
37 голосов
/ 27 февраля 2009

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

Ответы [ 8 ]

48 голосов
/ 12 августа 2009

Более упрощенное решение, как показано ниже. Проверьте это!

var resultString = document.getElementById("theTextBoxInQuestion")
                           .value
                           .replace(/^[0]+/g,"");
28 голосов
/ 25 декабря 2012
str.replace(/^0+(?!\.|$)/, '')

  '0000.00' --> '0.00'   
     '0.00' --> '0.00'   
  '00123.0' --> '123.0'   
        '0' --> '0'  
13 голосов
/ 27 февраля 2009
var value= document.getElementById("theTextBoxInQuestion").value;
var number= parseFloat(value).toFixed(2);
9 голосов
/ 27 февраля 2009

Звучит так, будто вы просто хотите удалить начальные нули, если только не осталось только одного («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)
}
5 голосов
/ 05 июня 2013

Хорошо, простое решение. Единственная проблема - когда строка «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

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

5 голосов
/ 26 ноября 2011

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

<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>
2 голосов
/ 27 февраля 2009

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

<input type="text" onblur="this.value=this.value.replace(/^0+(?=\d\.)/, '')">
0 голосов
/ 17 октября 2018

Вы можете использовать регулярное выражение для замены лидирующих нулей одним:

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 означает, что вы нашли во втором наборе ()

enter image description here

...