Это может работать:
/^\d{5}(?:,\d{5})*$/
edit 1 заметил, что ridgerunner имеет тот же ответ, поэтому не обращайте на это внимания.
редактировать 2 некоторые заметки о производительности.
Анализ отказов
Возврат возвращает при сбое:
^\d{5}(?:,\d{5})*$
возвращает ,\d{5}
^(?:\d{5},)*\d{5}$
возвращает \d{5},
Post Backtracking регрессивные проверки топографии:
(После возврата backtracking справа от того, который вернул), чеки находятся
^\d{5}(?:,\d{5})*$
проверкидля $
^(?:\d{5},)*\d{5}$
проверок для \d{5}$
Победитель: ^ \ d {5} (?:, \ d {5}) * $
без возврата регулярных выражений (с использованием позитивного квантификатора +
):
^\d{5}(?:,\d{5})*+$
ничего не дает обратно, немедленно отказывает
^(?:\d{5},)*+\d{5}$
не возвращает ничего, немедленно отказывает
Тесты
Использование строки из 50 блоков \d{5},
.
Строка выборки сопоставляется с каждым регулярным выражением в цикле 100 000 раз.
Ошибка была вызвана в концестрока, удаленная для теста на успех.
Успех:
Все заняло 1 секунду, чтобы завершить успешный пробег.
Отказ, возврат:
^\d{5}(?:,\d{5})\*$
заняло 1,2 секунд лучший
^(?:\d{5},)\*\d{5}$
взял 1,6 секунд
Отказ, без возврата:
^\d{5}(?:,\d{5})*+$
заняло .9 секунд
^(?:\d{5},)*+\d{5}$
заняло .9 секунд
Выводы
Возврат - Поставьте наименьшую проверку после возврата
после подвыражения возврата.В этом случае наименьшее значение
составляет $
.
. В общем случае ставьте обязательные выражения впереди из необязательных.
Best ^ \ d {5} (?:, \ d {5}) * $
Без возврата - Неважно.
^\d{5}(?:,\d{5})*+$
или ^(?:\d{5},)*+\d{5}$