"цикличный" поиск в регулярных выражениях

Необходимо проверить номера телефонов, которые написаны в виде обычной последовательности 10 цифр без разделителей. Проблема в том, что номеров телефонов может быть несколько (перечисленных через запятую), поэтому они вводятся в input text, а значит, пользователь может ввести туда букву.

Простая регулярка [\d]{10}|[,] находит последовательность 10 цифр, либо запятую, но меня не устроит что в строке "9543243443, 9512345567б" она не выдаст ошибку, так как указанные сочетания найдены (не смотря на букву б в конце второго телефона). Написать регулярку на поиск любых символов кроме цифр и запятой, я не могу, так как в методе, написанном не мною, регулярка прогоняется через ! preg_match() и только при возвращении true сгенерится ошибка. Другими словами, я должен написать регулярку, которая проверит что всё выражение есть последовательность 10-ти цифр, разделенных запятой (а может и нет, если телефон один) и если это не так - ошибка.

Я не работал ранее с регулярками, поэтому у меня вопрос: можно ли заставить регулярку проверять строку сегментировано, по кусочкам. Проверил первый сегмент(10 цифр) - ок, проверил второй сегмент(10 цифр) - ок, на третьем сегменте не 10 цифр - стоп, ошибка.


Ответы (2 шт):

Автор решения: SAnton

Решение вашего вопроса

/^(\d{10})$|^(\d{10},)+(\d{10})$/

если вам нужен будет пробел, то нужно будет доработать выражение

→ Ссылка
Автор решения: Qwertiy

Через запятую без пробелов:

^(\d{10}($|,))+$

Через запятую с разрешёнными после неё пробелами:

^(\d{10}($|,\s*))+$

Через запятую с пробелами вне номеров телефонов:

^\s*(\d{10}\s*($|,)\s*)+$
→ Ссылка