Вы говорите о последовательных повторяющихся цифрах, или все семь цифр должны быть уникальными? Например:
2342497553 // consecutive duplicates
2345816245 // non-consecutive duplicates
2345816249 // no duplicates
Это регулярное выражение отфильтровывает последовательные дубликаты:
^(?:[2-9][0-8][0-9])(?!.*(\d)\1)([2-9][0-9]{2}[0-9]{4})$
... в то время как этот запрещает любые повторяющиеся цифры:
^(?:[2-9][0-8][0-9])(?!.*(\d).*\1)([2-9][0-9]{2}[0-9]{4})$
После того, как первые три цифры были использованы, опрашивающий пытается найти повторяющийся символ, либо сразу ((?!.*(.)\1)
), либо с дополнительными промежуточными символами ((?!.*(.).*\1)
). И это отрицательный прогноз, поэтому, если это удастся, общее совпадение не удастся.
РЕДАКТИРОВАТЬ: Оказывается, проблема проще, чем я думал. Чтобы отфильтровать числа типа 2345555555
, где последние семь цифр идентичны, используйте это:
^(?:[2-9][0-8][0-9])(?!(\d)\1+$)([2-9][0-9]{2}[0-9]{4})$
Важно включить конечный якорь ($
), потому что без этого он не сможет соответствовать действительным числам вроде 2345555556
. В качестве альтернативы вы можете указать, что нужно искать ровно шесть захваченных цифр: (?!(\d)\1{6})
.