it-swarm.com.ru

Правило проверки пароля Laravel

Как добавить правило проверки пароля в валидаторе?

Правило проверки:

Пароль содержит символы как минимум из трех следующих пяти категорий:

  • Английские заглавные буквы (A - Z)
  • Английские строчные буквы (a - z)
  • Основа 10 цифр (0 - 9)
  • Не буквенно-цифровые (например:!, $, # Или%)
  • Символы Юникода

Как добавить вышеуказанное правило в правило валидатора?

Мой код здесь

// create the validation rules ------------------------
    $rules = array(
        'name'             => 'required',                        // just a normal required validation
        'email'            => 'required|email|unique:ducks',     // required and must be unique in the ducks table
        'password'         => 'required',
        'password_confirm' => 'required|same:password'           // required and has to match the password field
    );

    // do the validation ----------------------------------
    // validate against the inputs from our form
    $validator = Validator::make(Input::all(), $rules);

    // check if the validator failed -----------------------
    if ($validator->fails()) {

        // get the error messages from the validator
        $messages = $validator->messages();

        // redirect our user back to the form with the errors from the validator
        return Redirect::to('home')
            ->withErrors($validator);

    }
25
Bharanikumar

У меня был похожий сценарий в Laravel, и я решил его следующим образом.

Пароль содержит символы как минимум из трех следующих пяти категорий:

  • Английские заглавные буквы (A - Z)
  • Английские строчные буквы (a - z)
  • Основа 10 цифр (0 - 9)
  • Не буквенно-цифровые (например:!, $, # Или%)
  • Символы Юникода

Во-первых, нам нужно создать регулярное выражение и проверить его.

Ваше регулярное выражение будет выглядеть так:

^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\x])(?=.*[!$#%]).*$

Я проверил и подтвердил это на этом сайте. Тем не менее, действуйте по-своему и корректируйте соответственно. Это только пример регулярных выражений, вы можете манипулировать так, как вы хотите.

Итак, ваш окончательный код Laravel должен быть таким: 

'password' => 'required|
               min:6|
               regex:/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\X])(?=.*[!$#%]).*$/|
               confirmed',

Update Как упоминается в комментарии @NikK, в Laravel 5.6 значение пароля должно быть заключено в квадратные скобки, например

'password' => ['required', 
               'min:6', 
               'regex:/^.*(?=.{3,})(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[\d\X])(?=.*[!$#%]).*$/', 
               'confirmed']

Я не тестировал его на Laravel 5.6, поэтому я доверяю @NikK, поэтому я перешел на работу с c # /. Net в эти дни и у меня мало времени на Laravel.

Заметка: 

  1. Я протестировал и проверил его как на сайте регулярных выражений, так и в тестовой среде Laravel 5, и он работает.
  2. Я использовал min: 6, это необязательно, но всегда полезно иметь политику безопасности, которая отражает различные аспекты, одним из которых является минимальная длина пароля.
  3. Я предлагаю вам использовать подтвержденный пароль, чтобы убедиться, что пользователь вводит правильный пароль. 
  4. В пределах 6 символов наше регулярное выражение должно содержать как минимум 3 из a-z или A-Z, а также число и специальный символ.
  5. Всегда проверяйте свой код в тестовой среде, прежде чем переходить к производству.
  6. Update: То, что я сделал в этом ответе, является просто примером пароля регулярного выражения

Некоторые онлайн-ссылки

Относительно вашего пользовательского сообщения проверки для правила регулярных выражений в Laravel, вот несколько ссылок, чтобы посмотреть:

82
maytham-ɯɐɥʇʎɐɯ

Похоже, хорошая работа для регулярных выражений. 

Правила проверки Laravel поддерживают регулярные выражения. Обе версии 4.X и 5.X поддерживают его:

Это также может помочь:

http://www.regular-expressions.info/unicode.html

3
Matthew Way

Это не совсем соответствует требованиям ОП, хотя, надеюсь, это поможет. С Laravel вы можете определить свои правила в удобном для обслуживания формате, например так:

    $inputs = [
        'email'    => 'foo',
        'password' => 'bar',
    ];

    $rules = [
        'email'    => 'required|email',
        'password' => [
            'required',
            'string',
            'min:10',             // must be at least 10 characters in length
            'regex:/[a-z]/',      // must contain at least one lowercase letter
            'regex:/[A-Z]/',      // must contain at least one uppercase letter
            'regex:/[0-9]/',      // must contain at least one digit
            'regex:/[@$!%*#?&]/', // must contain a special character
        ],
    ];

    $validation = \Validator::make( $inputs, $rules );

    if ( $validation->fails() ) {
        print_r( $validation->errors()->all() );
    }

Будет вывод:

    [
        'The email must be a valid email address.',
        'The password must be at least 10 characters.',
        'The password format is invalid.',
    ]

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

0
James