2011-11-29 2 views
0

У меня есть строка, где мне нужно разобрать ее как float, но сначала мне нужно ее заменить, если это не число (целое число или float), поэтому я пытаясь создать регулярное выражение, чтобы сделать этоRegex заменить строку, которая не является float

мои пытается результаты в 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'. Я имею в виду, что лично я бы сделал * валидацию *, что это на самом деле число, а не удаление символов. Но это не вопрос, о - спросил он. –

+1

'/ [^ \ d.]/G' позволяют разместить столько' .', сколько хотите. Например, работают '12.34.5' и' 1 .... 2 ... 3..45'. – Mistalis

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

Другой метод раздеться входной символ на гольца, пока мы не найдем правильный поплавок:

function findValidFloat(str) { 
    for (var i = 0; i < str.length; i++) { 
     var f = parseFloat(str.substr(i)) 
     if (!isNaN(f)) 
      return f; 
    } 
    return NaN; 
} 
Смежные вопросы