2016-08-26 4 views
1

У меня небольшая проблема, я пытаюсь создать собственное собственное регулярное выражение для PHP.После первого совпадения матча целая строка

Это мое выражение:

/([a-zA-Z]+[0-9]+[!?]+)/ 

После матчей он останавливается, например, a1? это первый матч, a2! является вторым матчем, но я хочу, чтобы соответствовать всей строке:

a1?a2! 

После этого я попытался это выражение:

/([a-zA-Z]+[0-9]+[!?]+){6,12}/ 

Однако это не что-нибудь.

+3

ли вы имеете в виду вы хотите '/ (?: [A-Za-Z] + [0-9] + [!?] +) +/'? См. Https://regex101.com/r/zN1tZ1/1. Или вы намерены совместить * всю строку *? Затем используйте [''/^(?:[a-zA-Z]+[0-9]+[!?]+)+$/D''](https://regex101.com/r/fV2rE2/ 2) –

ответ

2

Отметьте, что ваше /([a-zA-Z]+[0-9]+[!?]+){6,12}/ регулярное выражение соответствует 6-12 последовательностям букв 1+, 1 + цифр и 1+ ! или ? символов.

На самом деле, вы хотите, чтобы соответствовать 1 или более таких последовательностей, а затем использовать простую + квантор:

'/^(?:[a-zA-Z]+[0-9]+[!?]+)+$/D' 

Смотрите regex demo

Так как вам нужно проверки достоверности шаблон, я думаю, что вы необходимо сопоставить целую строку, поэтому вам нужны якоря ^ и $ и используйте модификатор /D, чтобы запретить завершающий \n.

1

это регулярное выражение для вашего пароля "a1? A2!" -?.?.?. [?]?.

((= [A-Za-Z]) (= \ д) (= ) (= [A-Za-Z, ]) (= \ г) (= []) {6,20})

Но вы должны использовать стандартные для пароля, как -?.?.?!.

^(? = [az]) (? =. [AZ]) (? =. \ d) (? =. [$ @ $! % ? &]) [A-Za-z \ d $ @ $!%? &] {8}

Это регулярное выражение для: Минимум 8 символов, по меньшей мере 1 Прописные алфавита, 1 строчная алфавит, 1 Количество и 1 специальный символ