[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Позитивный просмотр вперед
h234
Проверка пароля из гугла, по принципу: длина пароля более 8 символов,в пароле должны быть символы верхнего регистра, нижнего регистра и цифры.
/^(?=.*?[A-Z])(?=.*?[0-9])(?=.*?[a-z]).{8,}$/

Поясните, как работает данное выражение.
Т.е. визуально данное выражение должно работать так:
-находим символ верхнего регистра
-находим через ряд символов цифру
-находим через ряд символов символ нижнего регистра
А уже после операций просмотра, находим 8 или более символов

Тем не менее, выражение работает корректно, скажем с такой последовательностью: ABCD%^&z9

В чем подвох?



Спустя 8 минут, 52 секунды (28.02.2012 - 22:52) inpost написал(а):
Из гугла? У гугла такая проверка? Какая-то кривая проверка вообще.
Ты искал, как правильно сделать, то почитай учебник какой-нибудь по регулярным выражением, больше пользы будет.

Спустя 4 минуты, 55 секунд (28.02.2012 - 22:57) h234 написал(а):
Цитата (inpost @ 28.02.2012 - 19:52)
Из гугла? У гугла такая проверка? Какая-то кривая проверка вообще.
Ты искал, как правильно сделать, то почитай учебник какой-нибудь по регулярным выражением, больше пользы будет.

Я в том смысле, что я где то нагуглил это выражение. Мне не надо проверять пароль. Это все абстрактно. Меня интересует алгоритм работы этого выражения!

Спустя 6 часов, 37 минут (29.02.2012 - 05:34) Visman написал(а):
/^(?=.*?[A-Z])(?=.*?[0-9])(?=.*?[a-z]).{8,}$/

Думаю, что данная регулярка подразумевает что в пароле должен быть хотя бы один символ A-Z, хотя бы один символ 0-9 и хотя бы один символ a-z.
Все остальные символы могут быть введены от фонаря ;)

Спустя 2 часа, 21 минута, 28 секунд (29.02.2012 - 07:56) h234 написал(а):
Цитата (Visman @ 29.02.2012 - 02:34)
Думаю, что данная регулярка подразумевает что в пароле должен быть хотя бы один символ A-Z, хотя бы один символ 0-9 и хотя бы один символ a-z.
Все остальные символы могут быть введены от фонаря wink.gif

Дак это то да!
Как получается, например, что (?=.*?[A-Z]) подразумевает символ верхнего регистра во всем слове? а не перед восьмисимвольным словом? и как получается, что {8,} применительно ко всему выражению, а не к последней точке?

Спустя 10 минут, 8 секунд (29.02.2012 - 08:06) #8bit написал(а):
Цитата

В чем подвох?

Никакого подвоха
^(?=.*?[A-Z])

Начиная от начала строки "смотрит", присутствует ли в выражении символы A-Z
(?=.*?[0-9])

проверяет на цифры 0-9
(?=.*?[a-z])

проверяет на символы в нижнем регистре a-z
.{8,}

собственно, если до данной конструкции все совпало, ищет минимум 8 любых символов

Спустя 4 минуты, 50 секунд (29.02.2012 - 08:11) Visman написал(а):
?= - указывает на то, что мы проверяем символ на положительное совпадение, но не смещаем курсор на следующий символ

.*? - если не ошибаюсь, то это любое кол-во любых символов

[A-Z] - тут уже точно проверяем, что один символ это заглавная буква

Т.е. после этой проверки (?=.*?[A-Z]) курсор остался на нулевой позиции и следующая проверка проверяет строку опять сначала wink.gif

Подробно по регуляркам тут http://www.pcre.ru/docs/php/text/stdsyntax/

Спустя 5 минут, 22 секунды (29.02.2012 - 08:16) #8bit написал(а):
(?=...) - позитивная опережающая проверка, она не совпадает ни с какими символами. Она совпадает с местом, т.е. справа от данного места должно быть то-то и то-то. У тебя в выражении это место от начала строки, ^(?=.*?[A-Z]) - перебирает всю строку, пока на наткнется на A-Z и так далее, а перебор символов происходит в .{8,}.
Как-то так.

Спустя 55 минут, 27 секунд (29.02.2012 - 09:11) h234 написал(а):
Цитата (Visman @ 29.02.2012 - 05:11)
...но не смещаем курсор на следующий символ...

Вот она где истина то!!!
Спасибо, разобрался!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.