Регулярное выражение на проверку последовательности неповторяющихся цифр

Необходимо проверить на длину строки (4) и чтобы строка не содержала последовательно повторяющиеся цифры. То есть такого не должно быть 1111

Сперва проверяю если строка точно содержит 4 цифры ^(?=\d{4}$) а далее пока не получается придумать

UPDATE:

Получилось вот такой регуляркой, правда не оч компактной
^(?=\d{4}$)(?!1{4}|2{4}|3{4}|4{4}|5{4}|6{4}|7{4}|8{4}|9{4}|0{4})([1-9]\d+$)

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

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

как ограничить строку только 4мя цифрами вы уже в курсе, так что остается только сначала применить негативный просмотр вперед (?!___), исключив повторы. Для этого надо взять первую цифру у группу захвата (\d), а потом сослаться на нее через номер \1, повторив недостающие 3 раза {3}.

^(?!(\d)\1{3})\d{4}$
→ Ссылка
Автор решения: Wiktor Stribiżew

Регулярное выражение, которое найдёт совпадение целой строки из 4 цифр, начинающихся с ненулевой цифры, исключая строки с одинаковыми цифрами:

^([1-9])(?!\1+$)\d{3}$
  • ^ - начало строки
  • ([1-9]) - захватывающая подмаска №1, находит и сохраняет в своём буфере одну цифру от 1 до 9
  • (?!\1+$) - отмена совпадения при наличии сразу после текущей позиции 1 и более повторов цифры, захваченной в подмаске №1
  • \d{3} - любые три цифры
  • $ - конец строки.

См. пример работы регулярного выражения

→ Ссылка