Всем привет, всю головку уже сломал, плохо шарю в регулярках, в нете не нашел решения.
Функция 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 ? '.' : '') : '';
});
/^([0-9]+)(\.[0-9]+)(e([+-])?([0-9])+)?$/i
^ и $, метасимволы начала и конца, гарантируют что вся строка соответствует регулярке а не какая то ее часть
i в конце - опция игнорирования регистра для мантисы но можно задать в регулярке варианты и так
Данная регулярка пример и разберет на части целую, дробную и мантису
100
100.001
100.011e+12 (кстати формально неправильно целую часть при использовании мантисы делать больше 10 но все парсеры это обработают правильно)