Есть функция, которая проверяет значение на дробное
const isFloatNumberValue = (value: string) => (value.match(/^\d+([.,](\d{1,2})?)?$/g))
Ошибка в том, что мы можем вписать 00,01
, а должно быть 0,01
. Как исправить?
Шаблон regexp:
--Старая версия
^(?!0{2,})\d+([.,]\d+){0,1}$
Соответствуют шаблону:12,33; 0,01; 12,00; 11; 1,1234567
Не соответствует шаблону: 00,01; 124,; 0000,12
UPD, действительно 01,11 пропускался предыдущей версией, исправил:
^(?!0{1,}\d+)\d+([.,]\d+){0,1}$
Если есть цифры после ноля и до запятой, совпадения не будет.
По-моему, функция определяющая дробное ли число, должна выглядить как-то так, без всяких регулярок:
const a = '00000.00001';
const b = '92929';
function isDecimal (str){
return !isNaN(Number(str)) && Number(str) % 1 === 0
}
function isDecimal_2 (str){
return str.split('.').length === 1;
}
console.log(isDecimal(a), isDecimal(b));
console.log(isDecimal_2(a), isDecimal_2(b));
input { outline: none }
:invalid { border: 1px solid red }
:valid { border: 1px solid green }
<input pattern="^(0|[1-9]\d*)([.,]\d{0,2})?$" required autofocus value="0.12">
В общем, Если с именно одной цифрой до точки или запятой обязательной, то так:
^[0-9][.,][0-9]+$
Специально для пользователя @And скрины с https://regex101.com/
Если необходимо с несколькими нулями перед точкой, то можете воспользоваться следующим выражением:
^[0-9]*[.,][0-9]+$ //В Этом случае будет много чисел до точки и даже пройдёт .123
Если необходимо только с обязательным символом до точки(чтобы .123 не проходило) и неограниченным количеством символов перед ней, то можно так:
^\d+(?:[\.,]\d+)?$
Вариант с ограниченным количеством знаков после запятой 2
^[0-9][.,](\d{1,2})$
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Когда пользователю приходит новое сообщение, вывожу в title мигание, что новое сообщение как в вк
День добрый! Подскажите как организовать что-то типа локальной БДНужно с локального сайта получать содержимое локальных файлов из того...