2015-07-21 353 views
21

如何在驗證程序中添加密碼驗證規則?Laravel密碼驗證規則

驗證規則:

密碼包含至少三個以下五類的字符:

  • 英文大寫字符(A - Z)
  • 英文小寫字符(A - (0 - 9)
  • 非字母數字(例如:!,$,#或%)
  • Unicode字符

如何添加上述規則的驗證規則?

我的代碼這裏

// 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); 

    } 
+0

不能將每個字符都表示爲* unicode字符*嗎? –

回答

61

我有在Laravel有類似的情況,並以下面的方式解決它。

密碼包含從至少三個以下五類的字符:

  • 英文大寫字符(A - Z)
  • 英文小寫字符(A - Z)
  • 10個基本數字( !0 - 9)
  • 非字母數字(例如:,$#或%)
  • Unicode字符

首先,我們需要創建一個正則表達式並對其進行驗證。

你的正則表達式應該是這樣:

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

我已經測試並驗證它this網站。然而,以你自己的方式來執行你自己的方式並相應地調整。

因此,最終的Laravel代碼應該是這樣的:

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

注:

  1. 我對正則表達式的網站和Laravel 5測試都測試和驗證它環境和它的作品。
  2. 我已經使用了min:6,這是可選的,但是有一個反映不同方面的安全策略總是一個好習慣,其中一個是最小密碼長度。
  3. 我建議你使用密碼確認,以確保用戶輸入正確的密碼。
  4. 在6個字符中,我們的正則表達式應該包含至少3個a-z或A-Z以及數字和特殊字符。
  5. 在開始生產之前,請務必在測試環境中測試您的代碼。

一些網上的引用

關於在Laravel正則表達式規則自定義驗證消息,這裏有幾個鏈接查看:

+1

在您的正則表達式中,使用\ x而不是\ X,因爲\ X沒有特殊含義 – Mazzy

+1

Perfact解決方案。感謝您的大力幫助! –

3

聽起來像是不錯的工作正則表達式。

Laravel驗證規則支持正則表達式。無論4.x和5.x版本支持它:

這可能有助於太:

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

+0

am使用laravel 5.0 – Bharanikumar

+0

http://laravel.com/docs/5.0/validation#rule-regex –

+0

有沒有一種方法來顯示消息,如「密碼強度是錯誤的」這個驗證錯誤? – Bharanikumar

-6

複製模型

public static function Rules($id){ 
     if($id!=''){ 
      $id=','.$id; 
     } 
     return array(
     'name'=>'required|min:2', 
     'email'=>'required|email|unique:users,email'.$id, 
     'username'=>'required|unique:users,username'.$id, 
     'password'=>'required|min:8|regex:/^.*(?=.{3,})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[\d\X])(?=.*[!$#%@]).*$/|confirmed', 
     'password_confirmation'=>'required|min:6', 
     'mobile_no'=>'min:5', 
     'profile_image'=>'mimes:jpg,jpeg,bmp,png|max:10000' 
     ); 

    }