Регулярное выражение для числа с запятой - PullRequest
5 голосов
/ 31 августа 2009

Я пытаюсь проверить пользовательский ввод, который является просто числами через запятую. Я хотел бы сделать это с RegEx, но не могу придумать правильное выражение.

Должны быть проверены следующие строки (и больше):

1
12
123
1,234
12,345
123,456

и сделать недействительными следующие строки (и безумнее):

1,1
1,12
12,1
12,12
123,1
123,1

Любая помощь будет принята с благодарностью.

Вот что я пробовал до сих пор (РЕДАКТИРОВАТЬ: которые не работают), а также несколько вариантов ->

^(((\d{1,3},)*\d{3})|(\d{1,3}))$
^(\d{1,3}[,])*\d{3}|\d{1,3}$

1 Ответ

14 голосов
/ 01 сентября 2009

Как насчет этого:

^\d{1,3}([,]\d{3})*$

В основном вы можете иметь 1-3 цифры без запятой. После этого вам нужна запятая. Если у вас есть запятая, за ней должно следовать еще 3 цифры. Эта последовательность из 3-х запятых может появляться любое количество раз.

РЕДАКТИРОВАТЬ: Как заметил Эндрю Хэйр, вас не волнует, что было найдено в скобках, за исключением того факта, что оно соответствует, поэтому вы можете вместо этого использовать группу без захвата, поместив ?: после открывающей скобки:

^\d{1,3}(?:[,]\d{3})*$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...