【问题标题】:Javascript Regular Expressions - Replace non-numeric charactersJavascript 正则表达式 - 替换非数字字符
【发布时间】:2011-02-03 01:06:49
【问题描述】:

这行得通:

var.replace(/[^0-9]+/g, '');  

那个简单的 sn-p 将把任何不是数字的东西都替换掉。

但小数也是真实的。所以,我想弄清楚如何包含句号。

我确信这真的很简单,但我的测试不起作用。

【问题讨论】:

  • 您是在寻找一个号码,还是多个号码? IE。对于“12.3 a b5”,您要返回“12.3 5”还是“12.35”,或者该输入字符串甚至不可能?

标签: javascript regex


【解决方案1】:

你逃过了那个时期吗? var.replace(/[^0-9\.]+/g, '');

【讨论】:

  • 我相信没有必要逃避这个时期。
【解决方案2】:

替换不是数字的东西比替换数字的东西要复杂一些。

那些建议简单地添加点的人忽略了 .也用作句号,所以:

This is a test. 0.9, 1, 2, 3 将变为 .0.9123

您问题中的特定正则表达式在很大程度上取决于目的。如果你的字符串中只有一个数字,你可以这样做:

var.replace(/.*?(([0-9]*\.)?[0-9]+).*/g, "$1")

这会找到第一个数字,并将整个字符串替换为匹配的数字。

【讨论】:

    【解决方案3】:

    试试这个:

    var.replace(/[^0-9\\.]+/g, '');
    

    【讨论】:

      【解决方案4】:

      试试这个:

      var.replace(/[0-9]*\.?[0-9]+/g, '');
      

      只匹配有效的小数(例如“1”、“1.0”、“.5”,但不匹配“1.0.22”)

      【讨论】:

      • 其实这个匹配B.006,或者blah123。他正在寻找负面案例。
      【解决方案5】:

      如果您不想将 IP 地址与小数一起捕获:

      var.replace(/[^0-9]+\\.?[0-9]*/g, '');
      

      这只会捕获带有一个或零个句点的数字

      【讨论】:

      • 这是错误的。这匹配非数字,后跟一个可能的句点,然后是数字。发帖人想用空替换所有非数字。
      • 谢谢。我误解了这个问题。
      • 虽然我认为这表示匹配任何以一个或多个数字开头,后跟 0 或 1 个句点,后跟 0 个或多个数字的内容。
      【解决方案6】:

      已经有很多正确答案,只是指出您可能还需要考虑负号。"\-" 将其添加到任何现有答案中以允许负数。

      【讨论】:

        【解决方案7】:

        这样做怎么样:

        var numbers = str.gsub(/[0-9]*\.?[0-9]+/, "#{0} ");
        

        【讨论】:

          【解决方案8】:

          在 ASP.Net 文本框中对非数字字符进行简短的内联替换:

           <asp:TextBox ID="txtJobNo" runat="server" class="TextBoxStyle" onkeyup="this.value=this.value.replace(/[^0-9]/g,'')" />
          

          根据需要更改正则表达式部分。很多人抱怨使用箭头键时光标会一直走到最后,但人们往往会在没有注意到的情况下处理这个问题,例如,箭头...箭头...箭头...好吧... backspace 退格,输入新字符。

          【讨论】:

            【解决方案9】:

            这是我使用的几个 jQuery 输入类类型:

            $("input.intgr").keyup(function (e) { // Filter non-digits from input value.
                if (/\D/g.test($(this).val())) $(this).val($(this).val().replace(/\D/g, ''));
            });
            $("input.nmbr").keyup(function (e) { // Filter non-numeric from input value.
                var tVal=$(this).val();
                if (tVal!="" && isNaN(tVal)){
                    tVal=(tVal.substr(0,1).replace(/[^0-9\.\-]/, '')+tVal.substr(1).replace(/[^0-9\.]/, ''));
                    var raVal=tVal.split(".")
                    if(raVal.length>2)
                        tVal=raVal[0]+"."+raVal.slice(1).join("");
                    $(this).val(tVal);
                } 
            });
            

            intgr 只允许数字 - 就像这里的其他解决方案一样。

            nmbr 只允许正/负小数。负数必须是第一个字符(如果需要,可以在过滤器中添加“+”),将-3.6.23.333 剥离为-3.623333

            我提出 nmbr 是因为我厌倦了试图找到仅保留 1 位小数和负数在第 1 位的方法

            【讨论】:

              【解决方案10】:

              这个只适用于 -ve+ve numbers

              &lt;input type="text" oninput="this.value = this.value.replace(/[^0-9\-]+/g, '').replace(/(\..*)\./g, '$1');"&gt;

              【讨论】:

                猜你喜欢
                • 2020-03-30
                • 2013-01-21
                • 1970-01-01
                • 2017-11-03
                • 1970-01-01
                • 2014-03-22
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多