2015-01-28 3 views
0

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

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])(?=.*[[email protected]#$&*])(?=.*[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 является zerolength утверждение, добавить .+ в конце регулярного выражения:

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

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

/^(?=.*[A-Z])(?=.*[[email protected]#$&*])(?=.*[0-9])(?=.*[a-z]).{8,20}$/ 
+0

Первое решение отлично работало, так как для ограничения длины я уже проверил его раньше. Большое спасибо – Shuvro

+0

@Shuvro: Добро пожаловать. – Toto

Смежные вопросы