Laravel 4 регулярное выражение: проверка шаблона для пароля не работает

Я пытаюсь проверить надежность пароля в Laravel 4 с помощью регулярного выражения: проверка шаблона. Я пытаюсь сделать это следующим образом, но это всегда дает мне "Пароль слабый" взамен, если моя проверка $validator проходит.

public function checkPassStrength(){
    $password = Input::get('password');
    $validator = Validator::make(Input::all(), array(
        'password' => 'alpha_dash|min:6'
    ));
    $niceNames = array(
        'password' => 'Password'
    );
    $validator->setAttributeNames($niceNames);
    if($validator->fails()) {
        return Response::json(array('valid' => false, 'msg' => $validator->messages()->first('password')));
    } else {
        $strong = Validator::make(Input::all(), array(
            'password' => array('regex:/^(?=.*[A-Z])(?=.*[!@#$&*])(?=.*[0-9])(?=.*[a-z])$/')
        ));
        $medium = Validator::make(Input::all(), array(
            'password' => array('regex:/^(?=.*[A-Z])(?=.*[0-9])(?=.*[a-z])$/')
        ));
        if($strong->passes()){
            return Response::json(array('valid' => false, 'msg' => 'Password is strong'));
        } elseif($medium->passes()){
            return Response::json(array('valid' => false, 'msg' => 'Password is medium'));
        } else {
            return Response::json(array('valid' => false, 'msg' => 'Password is weak'));
        }

    }
}

1 ответ

Решение

Lookahead это утверждение нулевой длины, добавить .+ в конце регулярного выражения:

/^(?=.*[A-Z])(?=.*[!@#$&*])(?=.*[0-9])(?=.*[a-z]).+$/

Или, если вы хотите ограничить длину от 8 до 20 символов:

/^(?=.*[A-Z])(?=.*[!@#$&*])(?=.*[0-9])(?=.*[a-z]).{8,20}$/
Другие вопросы по тегам