Проверка регулярного выражения для чисел с разделителем запятых

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

7
задан bluish 28 March 2011 в 08:07
поделиться

3 ответа

Это должно сработать:

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

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

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

  • Чтобы разрешить отрицательные числа, замените \ d + на [+ -]? \ D +
  • Чтобы разрешить дроби: замените \ d + на [+ - ]? \ d + (?: \. \ d +)?
15
ответ дан 6 December 2019 в 07:24
поделиться

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

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

Теперь мы можем составить нужный нам regex:

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

То есть:

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

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

References


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

По желанию можно сделать скобки незахватывающими для производительности:

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

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

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

References

9
ответ дан 6 December 2019 в 07:24
поделиться
^[0-9]*(,){1}[0-9]*/

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

0
ответ дан 6 December 2019 в 07:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: