2015-10-29 112 views
3

當前我在laravel輸入驗證中遇到了一些問題,其中驗證規則之間似乎不適用正確。以下是我的HTML代碼。Laravel輸入驗證之間沒有正確驗證

<input type="hidden" name="_token" value="{{ csrf_token() }}"> 
       <div class="margin-bottom-10"> 
        <label>Thread Title :</label> 
        <input name="thread_title" maxlength="100" required> 
       </div>     
       <div class="margin-bottom-10"> 
        <label>Price :</label> 
        <input type="number" step="0.01" min="0" required title="Please enter price with x.xx format." name="thread_item_price" /> 
       </div> 

我想要做的是驗證給定的價格必須介於0和9999.99之間。我檢查元素,並刪除最小=「0」,並嘗試提交-1000的負值,系統似乎接受輸入。下面是我的驗證規則

$validator = Validator::make($request::all(), 
      [ 
       'thread_title' => 'required|max:100', 
       'thread_item_price' => 'between:0,9999.99' 
      ], 
      [ 
       'thread_title.required' => 'Please fill in thread title.', 
       'thread_title.max' => 'Thread title has exceeded 100 characters.', 
       'thread_item_price.required' => 'Price cannot be empty.', 
       'thread_item_price.between' => 'Price must be equals to 0 or 9999.99.', 
      ]); 

     if ($validator->fails()) { 
      return Redirect::back() 
       ->withErrors($validator) 
       ->withInput(); 
     }; 

我是否做錯了什麼,使驗證失敗?

回答

3

你需要讓Laravel知道它是一個數值。這應該適合你。

'thread_item_price' => 'numeric|between:0,9999.99' 
3

規則之間只接受數字的整數。浮點數應該使用digits_between規則。

編輯: 我不知道爲什麼Laravel接受它,驗證規則digits_between使用is_numeric函數。你可以嘗試正則表達式規則:

['thread_item_price' => 'regex:/^\d{0,4}\.\d{2}$/']; 
+0

它仍然digits_between –

+1

接受沒有必要運行正則表達式。 'digits_between'檢查數字的位數,而不是輸入的數字值。 「之間」的作品,但你需要讓Laravel知道它是一個數值,如我的答案中所示。 –