REGEX Принимать числа, разделенные запятыми, но диапазон номеров 0-32767 - PullRequest
9 голосов
/ 07 июня 2011

Мне нужно написать регулярное выражение для ввода, как это

23,456,22,1,32767

т.е.

  1. Запятые не допускаются в начале или в конце.
  2. Пробелы могут предшествовать и / или начинаться запятой, например, 23, 45,56, 67 и т. Д.
  3. Диапазоны каждого числа должны быть 0-32767.

В настоящее время я использую регулярное выражение, подобное этому [0-9]+(,[0-9]+)*.

Это позволяет использовать числа, разделенные запятыми (без пробелов вообще), и не проверяет диапазон номеров.

Ответы [ 2 ]

16 голосов
/ 07 июня 2011

Вероятно, разумно сделать это в два этапа. Сначала убедитесь, что диапазон составляет 0-99999:

^[0-9]{1,5}( *, *[0-9]{1,5})*$

Затем проанализируйте строку в списке целых чисел, используя язык программирования общего назначения, и проверьте, что x <= 32767 для каждого целого числа x.

9 голосов
/ 07 июня 2011

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

0*(?:3276[0-7]|327[0-5][0-9]|32[0-6][0-9]{2}|3[01][0-9]{3}|[12][0-9]{4}|[1-9][0-9]{1,3}|[0-9])

совпаденийцелое число от 0 до 32767, с необязательными ведущими нулями.

Таким образом, все ваше регулярное выражение будет

^0*(?:3276[0-7]|327[0-5][0-9]|32[0-6][0-9]{2}|3[01][0-9]{3}|[12][0-9]{4}|[1-9][0-9]{1,3}|[0-9])(?: *, *0*(?:3276[0-7]|327[0-5][0-9]|32[0-6][0-9]{2}|3[01][0-9]{3}|[12][0-9]{4}|[1-9][0-9]{1,3}|[0-9]))*$

Теперь представьте, что вы унаследовали это регулярное выражение от сотрудника, ушедшего из вашей компании на годыназад ... Веселитесь:)

Поэтому примите совет Марка.

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

...