【问题标题】:Input field value - remove leading zeros输入字段值 - 删除前导零
【发布时间】:2010-10-10 07:24:25
【问题描述】:

我有一个 Javascript 文本框。当我在文本框中输入'0000.00' 时,我想知道如何将其转换为只有一个前导零,例如'0.00'

【问题讨论】:

  • 需要澄清什么是“字符串”。如果您的“字符串”是十进制数字,那么答案将与您的“字符串”是文本字符串不同。 "00000.000" -> "0.000" 将是十进制转换。 "000TXT10001" -> "0TXT10001" 需要修剪功能。例如,当输入为“0011.1100”->“011.1100”或“11.11”时,您期望什么?

标签: javascript leading-zero


【解决方案1】:

试试这个:

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

【讨论】:

    【解决方案2】:
    var value= document.getElementById("theTextBoxInQuestion").value;
    var number= parseFloat(value).toFixed(2);
    

    【讨论】:

    • 如果小数点左边的零数量很大,这会导致任何问题吗?
    • Eric 有一个观点,它只有在你有一个前导零时才有效。不止于此,失败。
    【解决方案3】:

    听起来您只想删除前导零,除非只剩下一个(“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)
    }
    

    【讨论】:

    • 这是一个很好的解决方案。依赖内置函数并不总是最好的选择。我会把它变成一个辅助函数,它接受一个字符串参数并返回格式化的字符串。
    • 对我来说效果很好。我只是建议添加一段代码来支持负数(第一个字符带有“-”)。
    【解决方案4】:

    更简化的解决方案如下。看看这个!

    var resultString = document.getElementById("theTextBoxInQuestion")
                               .value
                               .replace(/^[0]+/g,"");
    

    【讨论】:

    • @MikeM,那么你可以使用replace(/^[0]+/g, "0")
    【解决方案5】:

    您可以使用此代码:

    <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>
    

    【讨论】:

      【解决方案6】:
      str.replace(/^0+(?!\.|$)/, '')
      
        '0000.00' --> '0.00'   
           '0.00' --> '0.00'   
        '00123.0' --> '123.0'   
              '0' --> '0'  
      

      【讨论】:

      • 非常好的解决方案,我正在寻找
      • @MikeM 有人可以详细说明一下吗?根据我对正则表达式和 regexr.com/4tn79 的理解,使用的正则表达式与第三个示例中的零不匹配,但该函数确实适用于所有示例(使用 Chrome)。那么如果正则表达式不正确匹配,第三个示例如何工作?!我怎么能确定它会一直有效?
      【解决方案7】:

      好的,一个简单的解决方案。唯一的问题是当字符串为“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
      

      在某些情况下,我认为这可以工作......

      【讨论】:

        【解决方案8】:

        您可以使用正则表达式将前导零替换为一个:

        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"
        

        匹配:&lt;beginning of text&gt;&lt;optional minus sign&gt;&lt;any sequence of zeroes&gt;&lt;either a zero before the dot or another digit&gt;

        替换为:&lt;same sign if available&gt;&lt;the part of the string after the sequence of zeroes&gt;

        • ^ 是文本的开头

        • ?表示可选(指前一个字符)

        • (a|b) 表示 a 或 b

        • 。是点(转义为 . 有特殊含义)

        • \d 是任意数字

        • $1 表示你在第一组 () 中找到的东西

        • $2 表示你在第二组 () 中找到的东西

        【讨论】:

        • 能否详细说明。还有可以不发图片吗?图片链接可能会中断,而文本将始终存在。
        • Stackoverflow 指南规定不要发布文本、代码、数据或错误消息的图片。包括代码的文本输出。原因有很多:文本图片可能难以阅读,尤其是在移动设备上,它可能会导致对计量蜂窝数据进行不必要的数据下载,无法复制粘贴或搜索,并且不便于访问。图片的良好用途是当问题描述无法用文字描述的图形问题时。请删除不必要的图片以符合 SO 准则。
        猜你喜欢
        • 1970-01-01
        • 2015-08-18
        • 2010-09-26
        • 1970-01-01
        • 2010-09-10
        • 2011-04-09
        • 1970-01-01
        • 2016-01-15
        相关资源
        最近更新 更多