Есть регулярка ^([0-9]*\.[0-9]+)$, как сделать чтобы она пропускала числа с плавающей точкой и запятой?
- 388
4 Answers
Примечание. Все перечисленные ниже выражения предназначены для валидации целой строки. Если необходимо найти совпадения в тексте, удалите ^ и $.
Ответ
Замените \. на [.,] и уберите лишние скобки:
^[0-9]*[.,][0-9]+$
Чтобы пропускала целые числа, добавьте квантификатор ?:
^[0-9]*[.,]?[0-9]+$
^
^- начало строки[0-9]*- 0 и более цифр[.,]- точка или запятая ([,.]?- одна или ноль запятых или точек)[0-9]+- 1 и более цифр$- конец строки.
Если нужно более "продвинутое" выражение, можно воспользоваться
^[-+]?[0-9]*[.,][0-9]+(?:[eE][-+]?[0-9]+)?$
или - чтобы поддерживало и целые, и дробные числа:
^[-+]?[0-9]*[.,]?[0-9]+(?:[eE][-+]?[0-9]+)?$
Это вариант выражения на regular-expressions.info.
- 21,208
Для чисел с плавающей точкой есть несколько записей. Если вы подразумиваете наличие одной точки или запятой, то можно так:
^\d+(?:[\.,]\d+)?$
[0-9]* - вашем случае пропустит невалидную конструкцию , например .5656
- 473
-
почему она невалидна? Большинство языков её понимают. – pavel Oct 10 '16 at 09:34
-
я про конкретный случай. [0-9]* значит 0 и больше, то есть ,345345 пропустит [0-9]+ значит 1 и больше – mkardakov Oct 10 '16 at 10:51
Вот эта регулярка
/^-?(0|[1-9]+)(?:[.,]\d{1,2}|)$/
разрешает целые и дробные числа, не пропускает записи вроде ".12" или "000.00", "0.11.11", также разрешает отрицательные и положительные. Чтобы изменить число знаков после запятой достаточно в части "{1,2}" изменить число "2" на нужное количество
- 1
Так:
^(0|[1-9]\d*)([.,]\d+)?
разрешает целые, дробные, исключает вариант с несколькими нулями перед дробной частью, на подобии: "000.0001".
- 51,614