Как создать регулярное выражение, которое проверяет, является ли строка:
- число
- [необязательно]
,
десятичная точка - [обязательно, если вы едите] другой номер
Также:
- У него НЕТ точки
.
в качестве символа тысяч.
Я попытался создать его:
[0-9,]+[^.]
Но результаты:
22,33 CORRECTO
33.44 INCORRECTO
22,33... CORRECTO // PERO DEBERIA SER INCORRECTO!!!
232.33dfdfd CORRECTO // PERO DEBERIA SER INCORRECTO!!!
Ожидаемые результаты:
22,33 CORRECTO
225,3432 CORRECTO
33.44 INCORRECTO
22,33... INCORRECTO
23, INCORRECTO
Попробуйте это выражение
Демо отладки
это должно быть твое выражение
помните, что если вы передаете его функции в виде строки, вы должны экранировать косые черты, например:
Это выражение принимает отрицательные значения, использует
\d
вместо[0-9]
, без создания ненужных групп или экранирования ненужных символов:В качестве альтернативы, если вы хотите принять научную нотацию (например:)
1.2e+05
:Demo en regex101.com
Некоторые примечания о различиях:
Отрицательные . Распространенной ошибкой является забывание того, что число также может быть отрицательным и начинаться с
-
. Надеюсь, это поможет избежать головной боли, когда код уже находится в производстве.Использование
\d
. В некоторых языках\d
он соответствует цифрам из других алфавитов . Среди крупных: Python3, .Net, Perl, C/C++ (с ускорением), R, TCL или Oracle. Если вы хотите избежать этой детали, мы заменим все\d
на[0-9]
. А в остальном\d
он точно такой же[0-9]
и визуально лучше.Без создания ненужных групп . Когда вы используете круглые скобки, вы не просто группируете, вы также фиксируете текст, соответствующий этой группе. Но есть группы без захвата , у которых синтаксис такой , чтобы не использовать лишнюю память. Кроме того, это проще для тех, кто читает ваше регулярное выражение, потому что ясно, что вы группируете, но вам все равно, чтобы вернуть эту часть. - Я знаю, сначала трудно читать те и другие, которые не являются квантификатором, но уверяю вас, что за короткое время это читается подряд и понимается автоматически .
(?:subpatrón)
?
:
Не убегая от того, что не нужно . Запятая (
,
) не является метасимволом в регулярном выражении. Таким образом, его не нужно экранировать (ни\,
, ни[,]
), просто,
в регулярном выражении он воспринимается как литерал.В Java нет опции для строковых литералов ☹. Это единственный язык (известный мне), где вам нужно экранировать каждую косую черту, чтобы использовать это регулярное выражение:
Код:
С помощью этого регулярного выражения вы подтверждаете, что числа разделены запятыми для тысяч без десятичных знаков.
Пример:
Вы можете проверить это на http://regexr.com/
Это лучше, потому что позволяет при необходимости помещать только целые числа, а если вы ставите точку, она принимает только ее или десятичные дроби, я оставляю вам несколько сценариев
Демонстрация отладки https://www.debuggex.com/r/X43uNbM0EERtm8NF
При этом он проверяет наличие 1 или 2 символов после запятой.
не обязательно ставить десятичные дроби.
^[0-9]+([.][0-9]{1,2})?$
https://www.debuggex.com/r/qTPyvu3WB9xuUCaj
Если я правильно понимаю ваше описание, следующая строка будет допустимым числом:
Чтобы эта строка также была принята, регулярное выражение будет выглядеть так:
Демо отладки
Важно включить анкеры начала
^
и конца цепи$
.Без якоря
$
цепь232.33dfdfd
как правильная, когда ее нет.Если
22,
это неправильная строка, то нужно использовать регулярное выражение:Демо отладки