Несколько замечаний о шаблоне, который вы пробовали
- Вы можете опустить
{1}
и запятую в [0,3]
- В перспективе
(?!.*(\d)\1{3,})
(\d)
является второй группой захвата, потому что (?=(^[0,3]{1}))
содержит первую группу захвата, поэтому она должна быть \2
вместо \1
- . В дальнейшем вы можете опустить запятую в
{3,}
- В самом совпадении вы используете
.{7,11}
, где точка будет соответствовать любому символу, кроме новой строки. Вместо этого вы можете использовать \d
, чтобы сопоставлять только цифры
Ваш шаблон может выглядеть следующим образом
^(?=(^[03]))(?!.*(\d)\2{3})(?!^(?:0(?=1|$))?(?:1(?=2|$))?(?:2(?=3|$))?(?:3(?=4|$))?(?:4(?=5|$))?(?:5(?=6|$))?(?:6(?=7|$))?(?:7(?=8|$))?(?:8(?=9|$))?9?$)\d{7,11}$
Regex demo
Или оставить из первого взгляда и переместите его к совпадению, изменив квантификатор на \d{6,10}
и повторив группу захвата \1
вместо \2
^(?!.*(\d)\1{3})(?!(?:0(?=1|$))?(?:1(?=2|$))?(?:2(?=3|$))?(?:3(?=4|$))?(?:4(?=5|$))?(?:5(?=6|$))?(?:6(?=7|$))?(?:7(?=8|$))?(?:8(?=9|$))?9?$)[03]\d{6,10}$
Regex demo
Редактировать
Исходя из комментариев, строка не имеет 4 восходящих цифр:
^(?!.*(\d)\1{3})[03](?!\d*(?:0123|1234|2345|3456|4567|5678|6789))\d{6,10}$
Regex demo