正则表达式替换不浮动的字符串

时间:2011-11-29 22:00:41

标签: javascript regex

我有一个字符串,我需要将其解析为float,但首先我需要替换它,如果它不是数字(整数或浮点数),所以我试图创建一个正则表达式做到这一点

我的尝试导致 NaN

我最好的尝试之一是

var $replace = $text.replace(/^[^d.]*/, '');
var $float = parseFloat($replace);

有谁能告诉我,我做错了什么?

3 个答案:

答案 0 :(得分:1)

如果真的想要替换不是数字的所有内容,那么试试这个:

var $replace = $text.replace(/[^\d.]/g, '');
var $float = parseFloat($replace);

这将使用"123a3d2"字符串替换"12332"字符串。

答案 1 :(得分:1)

看起来你想在将字符串转换为float之前从字符串的开头删除“非数字”字符。一种天真的方法是:

var s = input.replace(/^[^\d.]+/, '');
var n = parseFloat(s);

这适用于像“foo123”这样的输入,但在“foo.bar.123”上会失败。要解析这个问题,我们需要一个更复杂的正则表达式:

var s = input.replace(/^(.(?!\d)|\D)+/, '');
var n = parseFloat(s);

另一种方法是通过char去除输入char,直到找到有效的float:

function findValidFloat(str) {
    for (var i = 0; i < str.length; i++) {
        var f = parseFloat(str.substr(i))
        if (!isNaN(f))
            return f;
    }
    return NaN;
}

答案 2 :(得分:0)

if (! isNaN($text))
  $float = parseFloat($text);
else
  $float = 0; // or whatever