Я хотел бы создать preg_match
для проверки моих паспортов, но я не уверен, как записать ее, чтобы использовать следующие специальные символы !@#$%
.
if(!preg_match(?????)$/', $password))
Вот мои правила пароля, которые я хочу использовать в регулярном выражении:
!@#$%
Спасибо за любую помощь, которую вы можете предложить.
Я думаю, это должно выглядеть так:
if(!preg_match('/^(?=.*\d)(?=.*[A-Za-z])[0-9A-Za-z!@#$%]{8,12}$/', $password)) { echo 'the password does not meet the requirements!'; }
Между началом -> ^
И конец -> $
строки должно быть хотя бы одно число -> (?=.*\d)
и хотя бы одну букву -> (?=.*[A-Za-z])
и оно должно быть числом, буквой или одним из следующих:! @ # $% -> [0-9A-Za-z!@#$%]
и должно быть 8-12 символов -> {8,12}
Поскольку пользователь557846 прокомментировал ваш вопрос, я бы также предложил вам разрешить больше символов, я обычно (если я использую максимум) беру не менее 50 🙂
Кстати, вы можете взглянуть на это руководство по регулярному выражению
preg_match('/^(?=.*\d)(?=.*[@#\-_$%^&+=§!\?])(?=.*[az])(?=.*[AZ])[0-9A-Za-z@#\-_$%^&+=§!\?]{8,20}$/',$password)
Мне понравился ответ r3bel, поэтому у меня была игра с ним, и в качестве функции проверки пароля я получил следующее:
function password_strength_check($password, $min_len = 8, $max_len = 70, $req_digit = 1, $req_lower = 1, $req_upper = 1, $req_symbol = 1) { // Build regex string depending on requirements for the password $regex = '/^'; if ($req_digit == 1) { $regex .= '(?=.*\d)'; } // Match at least 1 digit if ($req_lower == 1) { $regex .= '(?=.*[az])'; } // Match at least 1 lowercase letter if ($req_upper == 1) { $regex .= '(?=.*[AZ])'; } // Match at least 1 uppercase letter if ($req_symbol == 1) { $regex .= '(?=.*[^a-zA-Z\d])'; } // Match at least 1 character that is none of the above $regex .= '.{' . $min_len . ',' . $max_len . '}$/'; if(preg_match($regex, $password)) { return TRUE; } else { return FALSE; } }
Максимальные / минимальные длины по умолчанию или настраиваются, каждое требование по умолчанию включено, но может быть отключено, и я хотел бы поддерживать любые символы, поэтому последнее требование – «все, что не является одним из вышеуказанных типов», а не фиксированное набор символов.
Я разработал полное регулярное выражение для более сложной проверки
/^(?=.*\d)(?=.*[A-Za-z])(?=.*[AZ])(?=.*[az])(?=.*[ !#$%&'\(\) * +,-.\/[\\] ^ _`{|}~\"])[0-9A-Za-z !#$%&'\(\) * +,-.\/[\\] ^ _`{|}~\"]{8,50}$/
В основном я проверяю пароль на 1 цифру, 1 капитал, 1 нижний и 1 специальный символ. Надеюсь, это поможет кому-то искать регулярное выражение.
Посмотрите классы символов, основную функцию регулярных выражений.
Я сделал это с моей специальной формой hook_form_validate
в hook_form_validate
здесь пароль должен быть 6 символов букв, цифр и хотя бы одного специального символа.
<? if (!preg_match('/^(?=.*\d)(?=.*[A-Za-z])(?=.*[!@#$%])[0-9A-Za-z!@#$%]{6,15}$/', $form_state['values']['pass'])) { form_set_error('pass', t('Password must contain 6 characters of letters, numbers and at least one special character.')); } ?>
if (!preg_match('/^(?=.*\d)(?=.*[A-Za-z])(?=.*[!@#$%])[0-9A-Za-z!@#$%] {6,15}$/',($_POST['password']))) { $message='Password must contain 6 characters of letters, numbers and at least one special character.'; }
if(!preg_match('/^(?=.*\d)(?=.*[A-Za-z])[0-9A-Za-z!@#$%]{8,12}$/', $password)) { echo 'the password does not meet the requirements!'; }
В приведенном выше заявлении .. какой возможный пароль существует ?.