2012-04-27 4 views
0

Я нашел много регулярных выражений php и другие параметры для определения длины строки, и если она содержит одну букву или одно число, но как определить, имеет ли строка 2 номера в нем?PHP проверяет, что строка содержит 2 числа, 8 символов и 1 капитал

Я пытаюсь проверить пароль, который

  • Должно быть ровно 8 символов

  • Один из них должен быть прописной буквы

  • 2 из них должны быть номера

Есть ли одно регулярное выражение для выражения это?

+2

Почему вы хотите ограничить длину пароля до 8 символов? Надеюсь, вы не работаете в банке ... –

+0

Клиент запросил его –

+0

FYI вы мой герой. Удивительное решение. –

ответ

7
if (preg_match(
    '/^   # Start of string 
    (?=.*\p{Lu}) # at least one uppercase letter 
    (?=.*\d.*\d) # at least two digits 
    .{8}   # exactly 8 characters 
    $    # End of string 
    /xu',  
    $subject)) { 
    # Successful match 

(?=...) является lookahead assertion. Он проверяет, можно ли сопоставить определенное регулярное выражение в текущей позиции, но на самом деле не потребляет какую-либо часть строки, поэтому вы можете просто разместить несколько из них в строке.

+0

Я рекомендую проверять ваш ответ перед отправкой: P Не удалось прочитать его один раз, не будучи запрошенным, чтобы перезагрузить его для каждого последующего редактирования. – Hubro

+0

@Codemonkey: Да, извините. Сначала я упустил один из комментариев, и только тогда я понял, что он просит * точно * 8 символов. Какая ужасная идея для ограничения паролей ... –

+0

Это так говорится в вопросе :-) – Hubro