Проверка регулярных выражений для чисел с разделителем запятых - PullRequest
7 голосов
/ 11 августа 2010

Требуется регулярное выражение для проверки числа через запятую. 1,5,10,55 допустимо, но 1 ,,,, 10 недействительно.

Ответы [ 3 ]

15 голосов
/ 11 августа 2010

Это должно сделать это:

^\d+(,\d+)*$

Регулярное выражение довольно простое: \d+ - это первое число, за которым следуют дополнительные запятые и дополнительные числа.

Вы можете добавить \s* там, где считаете нужным, или удалить все пробелы перед проверкой.

  • Чтобы разрешить отрицательные числа заменить \d+ на [+-]?\d+
  • Чтобы разрешить дроби: замените \d+ на [+-]?\d+(?:\.\d+)?
9 голосов
/ 11 августа 2010

Вот компоненты регулярного выражения, которые мы собираемся использовать:

  • \d - сокращение для класса цифровых символов
  • + - один или-много спецификатора повторения
  • * является нулевым или более спецификатором повторения
  • (...) выполняет группировку
  • ^ и $ - начало и конецякоря линии соответственно

Теперь мы можем составить необходимое нам регулярное выражение:

^\d+(,\d+)*$

То есть:

from beginning...
|    ...to the end
|          |
^\d+(,\d+)*$              i.e. ^num(,num)*$
 \_/  \_/ 
 num  num

Обратите внимание, что *означает, что разрешено иметь только один номер.Если вы настаиваете хотя бы на двух числах, используйте вместо этого +.Вы также можете заменить \d+ другим шаблоном для числа, чтобы разрешить, например, знак и / или дробную часть.

Ссылки


Дополнительные темы: оптимизация

ОпциональноВы можете сделать скобки без захвата для производительности:

^\d+(?:,\d+)*$

И если аромат поддерживает это, вы можете сделать все повторения притяжательными в этом случае:

^\d++(?:,\d++)*+$

Ссылки

0 голосов
/ 11 августа 2010
^[0-9]*(,){1}[0-9]*/

попробуйте это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...