it-roy-ru.com

Создайте preg_match для подтверждения пароля (! @ # $%)

Я хотел бы создать функцию preg_match для проверки моих паролей, но я не уверен, как написать ее, чтобы использовать следующие специальные символы: [email protected]#$%.

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

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

  • Может содержать буквы и цифры
  • Должен содержать как минимум 1 цифру и 1 букву
  • Может содержать любой из следующих символов: [email protected]#$%
  • Должно быть 8-12 символов

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

9
Mark Rummel

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

if(!preg_match('/^(?=.*\d)(?=.*[A-Za-z])[[email protected]#$%]{8,12}$/', $password)) {
    echo 'the password does not meet the requirements!';
}

Между началом -> ^
И конец -> $
в строке должно быть хотя бы одно число -> (?=.*\d)
и хотя бы одна буква -> (?=.*[A-Za-z])
и должно быть числом, буквой или одним из следующих:! @ # $% -> [[email protected]#$%]
и должно быть 8-12 символов -> {8,12}

Поскольку user557846 прокомментировал ваш вопрос, я бы также предложил вам разрешить больше символов, я обычно (если использую максимум) беру не менее 50 :)

кстати, вы можете взглянуть на этот учебник регулярных выражений

47
r3bel
preg_match('/^(?=.*\d)(?=.*[@#\-_$%^&+=§!\?])(?=.*[a-z])(?=.*[A-Z])[[email protected]#\-_$%^&+=§!\?]{8,20}$/',$password)
  • хотя бы один строчный символ
  • хотя бы один заглавный символ
  • хотя бы одна цифра
  • хотя бы один специальный знак @ # -_ $% ^ & + = § !?
8
Thomas

Мне понравился ответ 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 .= '(?=.*[a-z])'; }           // Match at least 1 lowercase letter
    if ($req_upper == 1) { $regex .= '(?=.*[A-Z])'; }           // 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;
    }
}

Максимальные/минимальные длины являются значениями по умолчанию или регулируемыми, каждое требование по умолчанию включено, но его можно отключить, и я хотел поддержать любые символы, поэтому последнее требование - «все, что не относится к вышеперечисленным типам», а не фиксированное набор символов.

2
David Bell

Я разработал полное регулярное выражение для немного более сложной проверки

/^(?=.*\d)(?=.*[A-Za-z])(?=.*[A-Z])(?=.*[a-z])(?=.*[ !#$%&'\(\) * +,-.\/[\\] ^ _`{|}~\"])[0-9A-Za-z !#$%&'\(\) * +,-.\/[\\] ^ _`{|}~\"]{8,50}$/

В основном я проверяю, чтобы пароль состоял из 1 цифры, 1 заглавной буквы, 1 нижнего и 1 специального символа. Я надеюсь, что это помогает кому-то, ищущему регулярное выражение.

1
Morpheus_ro

Я сделал это с помощью своей пользовательской формы drupal в hook_form_validate, пароль должен состоять из 6 символов букв, цифр и хотя бы одного специального символа.

<?
if (!preg_match('/^(?=.*\d)(?=.*[A-Za-z])(?=.*[[email protected]#$%])[[email protected]#$%]{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.'));
}
?>
0
Rishi Kulshreshtha

Другой способ

Давайте посмотрим на это иначе, я считаю, что пользователи могут использовать все ASCII действительные символы (32 < ascii_code < 127) в пароле и создали функцию, которая проверяет все символы в таблице ASCII!

function check($pass, $i = 0){
     if(strlen($pass) > $i)
         return (0rd(pass[$i]) > 32 and 0rd(pass[$i]) < 127) and check($pass, $i + 1);
}

Использование

if(!check($_POST["password"])){
    echo "password is wrong";
}
0
Amir Forsati
if (!preg_match('/^(?=.*\d)(?=.*[A-Za-z])(?=.*[[email protected]#$%])[[email protected]#$%]
{6,15}$/',($_POST['password']))) {
    $message='Password must contain 6 characters of letters, numbers and 
    at least one special character.';
}
0
bhupinder singh