2011-11-29 37 views
0

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

我尝试的结果NaN的

我的一个最好的尝试是

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

可有人告诉我,我做错了什么?

+0

您的正则表示更换零个或多个字符从字符串的开头不是'd'或'''什么都没有......你想要*替换/删除什么? –

+0

我试图替换一切,那不是一个数字(或一个浮点数中使用的) – The87Boy

+0

为什么要在变量中加上一个美元符号? – NullUserException

回答

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

这只回答问题的一部分,因为它没有解决OP正在使用的错误正则表达式 – NullUserException

1

如果你真的来代替一切,那不是一个数字,那就试试这个:

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

这将取代"123a3d2"一个字符串的"12332"的字符串。

+0

如果'$ text =' hello.world''? – NullUserException

+0

@NullUserException然后是'$ float == NaN'。我的意思是,我会做一个验证*,这实际上是一个数字,而不是去掉字符,但这不是问题。 Ø p问。 –

+1

'/ [^ \ d。]/g'允许放置尽可能多的'.'。例如'12.34.5'和'1 .... 2 ... 3..45'的作品。 – Mistalis

1

它看起来像你想从字符串的开始去除“非数字”字符,然后将其转换为浮点数。一个天真的做法是:

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

这适用于像“foo123”的投入,但会失败的“foo.bar.123”。为了解析这一点,我们需要一个更复杂的正则表达式:

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

另一种方法是通过字符,直到我们找到一个有效的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; 
}