Вопрос № 32397: Здравствуйте.
У меня вопрос по регулярным выражениям.
Есть форма изменения пароля. Необходимо проверить чтобы пароль содержал буквы лат. алфавита притом как верхнего регистра так и нижнего, а также обязательно цифры и знаки. Если нет например...
Вопрос № 32.397
Здравствуйте.
У меня вопрос по регулярным выражениям.
Есть форма изменения пароля. Необходимо проверить чтобы пароль содержал буквы лат. алфавита притом как верхнего регистра так и нижнего, а также обязательно цифры и знаки. Если нет например цифр или букв в верхнем регистре нет - вывести ошибку.
}
--------- ставя оценку - подумай, может ты не все описал.
Ответ отправил: Дмитрий Иванов (статус: Студент)
Отправлен: 30.12.2005, 12:47
Отвечает: Schmak
Здравствуйте, Оськин Дмитрий Владимирович!
Можно перебирать строку по символам и смотреть, что это за символ.
Пример ($str - новый пароль):
$sl=false; // маленькие буквы
$bl=false; // большие буквы
$n=false; // цифры
$bad=false; // посторонние символы
for ($i=0;$i
{
$s=$str[$i];
$d=ord($s);
if ($d>64 && $d<91)
$bl=true; // большая буква
else if ($d>96 && $d<123)
$sl=true; // мелкая буква
else if ($d>47 && $d<58)
$n=true; // цифры
else $bad=true;
}
Теперь, если $bad=true, то есть какие-то левые символы (не цифры и не латинские буквы), если $bl, $sl и $n равны true и
$bad=false - пароль нормальный, а если какая-то из переменных $bl, $sl или $n равна false, то чего-то не хватает.
--------- Не всё то Windows, что висит!
Ответ отправил: Schmak (статус: Студент)
Отправлен: 30.12.2005, 13:41
Отвечает: Samum
Здравствуйте, Оськин Дмитрий Владимирович!
Если я правильно понял, то пароль должен обязательно состоять из символов английского алфавита разного регистра и цифр и всяческих спец.знаков. Сделать такую проверку можно проверяя наличие символов из каждой группы, например, так:
if (
preg_match("/^[a-zA-Z0-9~!@#$%^&*()_]+$/",$p) && // Состоит только из латинских букв и цифр
preg_match("/[a-z]/",$p) && // Точно содержит маленькие лат. буквы
preg_match("/[A-Z]/",$p) && // Точно содержит большие лат. буквы
preg_match("/[0-9]/",$p) && // Точно содержит цифры
preg_match("/[~!@#$%^&*()_]/",$p) // Точно содержит спец.символы
){
echo "Точно подходит.";
}
else{
echo "Чего-то не хватает!";
}
Переменная $p - это переданный пароль.
--------- Если бы программистам за их ошибки отрывали части тела, то в конце концов им пришлось бы использовать голову!
Ответ отправил: Samum (статус: Специалист)
Отправлен: 30.12.2005, 16:03