Создайте preg_match для проверки пароля, позволяющего (! @ # $%)

Я хотел бы создать preg_match для проверки моих паспортов, но я не уверен, как записать ее, чтобы использовать следующие специальные символы !@#$% .

 if(!preg_match(?????)$/', $password)) 

Вот мои правила пароля, которые я хочу использовать в регулярном выражении:

  • Может содержать буквы и цифры
  • Должен содержать не менее 1 цифры и 1 букву
  • Может содержать любой из этих символов !@#$%
  • Должно быть 8-12 символов

Спасибо за любую помощь, которую вы можете предложить.

Я думаю, это должно выглядеть так:

 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!'; } 

В приведенном выше заявлении .. какой возможный пароль существует ?.