@AZshar

Регулярка JS на получение float числа из строки?

Всем привет, всю головку уже сломал, плохо шарю в регулярках, в нете не нашел решения.
Функция test у регулярки работает, как нужно:
/^[0-9]+(\.[0-9]+)?$/.test('.....asdsasdasd1202.71312312312312312.'); //false, в любом случае работает корректно на всех случаях, что я тестил, true только на 1202.713123123123123, как и должно быть.
А в случае с replace, когда нужно запретить присутствие в строке, отличное от 123123.12312321, любых символов, не получается:
let value1 = '...1234.5678......m,,.s,d.,as.d,.asd.as.d,a.s,d.asd#@@#@#@#@#@#dsadasd.';
let i = 0;
const test = value1
.replace(/[^\d(.\d)?]+/g, '')
.replace(/[\.\%]/g, function (match) {
console.log('match', match);
return match === '.' ? (i++ === 0 ? '.' : '') : '';
});

Помогите, кто чем может?
  • Вопрос задан
  • 111 просмотров
Пригласить эксперта
Ответы на вопрос 3
@rPman
/^([0-9]+)(\.[0-9]+)(e([+-])?([0-9])+)?$/i
^ и $, метасимволы начала и конца, гарантируют что вся строка соответствует регулярке а не какая то ее часть
i в конце - опция игнорирования регистра для мантисы но можно задать в регулярке варианты и так
Данная регулярка пример и разберет на части целую, дробную и мантису
100
100.001
100.011e+12 (кстати формально неправильно целую часть при использовании мантисы делать больше 10 но все парсеры это обработают правильно)
Ответ написан
Комментировать
Fragster
@Fragster
помогло? отметь решением!
А зачем регулярка?

function isFloat(str) {
  return !isNaN(Number(str))
}
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
/([+-]?(?:\d+\.?\d*|\d*\.?\d+)(?:[eE][+-]?\d+)?)/
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы