2016-11-25 10 views
0

У меня всегда есть «NaN», когда хотел «ParseInt или parseFloat» из строки, как «SOMETEXT 330»parseFloat() с середины строки

Var a = "Sometext 330" 
return parseFloat(a); 

и возвращает «NaN», но я необходимо целое число или float 330

+0

Конечно, так как первый символ не является числом! –

+0

вам придется сломать строку и проверить номер, который вы не можете разобрать на эту строку, потому что он содержит текст –

+1

Если есть только два слова, 1-й текст и 2-й число, разделите его и возьмите только числовое. Кстати, parseFloat - это функция javascript, которую вы не можете изменить. – Shubham

ответ

6

Вы можете сначала дезинфицировать свою строку, чтобы в синтаксисе оставалась только цифра, прежде чем разбирать номер.

Редактировать: теперь это еще безопаснее, так как оно будет принимать типы номеров без взрывов.

var a = "Sometext 330" 
 

 
function safeParseFloat(val) { 
 
    return parseFloat(isNaN(val) ? val.replace(/[^\d\.]+/g, '') : val) 
 
} 
 

 
function superSafeParseFloat(val) { 
 
    if (isNaN(val)) { 
 
    if ((val = val.match(/([0-9\.,]+\d)/g))) { 
 
     val = val[0].replace(/[^\d\.]+/g, '') 
 
    } 
 
    } 
 
    return parseFloat(val) 
 
} 
 

 
console.log(
 
    safeParseFloat(a), 
 
    safeParseFloat(2000.69) 
 
) 
 

 
console.log(
 
    superSafeParseFloat('blah $2,000,000.69 AUD'), 
 
    superSafeParseFloat('blah $8008 USD'), 
 
    superSafeParseFloat('NotANumber'), 
 
    superSafeParseFloat(8008.69), 
 
    superSafeParseFloat('... something 500.5... test') 
 
)

+0

Это не будет работать с строкой типа '" ... что-то 500.5 ... test ". – Annarfych

+0

@Annarfych хорошо пункт. Я обновил ответ с помощью версии superSafe. Это не является международным безопасным, хотя – synthet1c

1

Вы также можете разделить строку тоже, если ваш случай использования всегда одинакова.

var str = "test 900"; 
 
var split = str.split(' '); 
 
// Loop through the split array 
 
split.forEach(function(item){ 
 
    // If the split is not NaN 
 
    if(!isNaN(item)){ 
 
    // Heres your number 
 
    console.log(item); 
 
    } 
 
});

0

Более изящный способ:

Var a = "Sometext 330" 
return parseFloat(a.match(/\d+$/)[0]);