2013-07-13 112 views
4

在Laravel應用程序中,我有一個表單,我需要用逗號作爲小數點分隔符來驗證數字。目前,它只有一個點的作品,因爲我的驗證規則是:使用逗號作爲小數點分隔符來驗證數字的最佳方法是什麼?

$rules = [ 
    'amount' => 'numeric|min:0', 
]; 

什麼是最好的方法:

  • 保持規則,並驗證之前更換點逗號?有沒有before_validation觀察者或類似的東西?
  • 構建一個自定義驗證規則?例如法國的數字?

回答

9

Laravel支持驗證規則regex模式,所以你可以用給定的模式匹配類似12,365.00和它的建議使用正則表達式作爲一項規則

$rules = array('amount' => array('match:/^[0-9]{1,3}(,[0-9]{3})*\.[0-9]+$/')); 

Check this link.時使用的陣列,而不是管另外,如果你想刪除任何理由的逗號然後check this answer

+0

如何使用?缺乏答案,因爲它給了我'方法[validateMatch]不存在。 ' –

+0

@StormSpirit:用'regex'替換'match',它應該可以工作。 –

1

基於來自The Alpha的優秀答案,下面是一個代碼片段,可以對浮點驗證進行配置。

這個片段添加到boot()功能在你的AppServiceProvider類(測試用Laravel 5.4):

Validator::extend('float', function ($attribute, $value, $parameters, $validator) { 
    $thousandsSeparator = env('APP_NUMBER_THOUSANDS_SEPARATOR') == '.' ? '\\' . env('APP_NUMBER_THOUSANDS_SEPARATOR') : env('APP_NUMBER_THOUSANDS_SEPARATOR'); 
    $commaSeparator = env('APP_NUMBER_COMMA_SEPARATOR') == '.' ? '\\' . env('APP_NUMBER_COMMA_SEPARATOR') : env('APP_NUMBER_COMMA_SEPARATOR'); 
    $regex = '~^[0-9]{1,3}(' . $thousandsSeparator . '[0-9]{3})*' . $commaSeparator . '[0-9]+$~'; 
    $validate = preg_match($regex, $value); 

    if ($validate === 1) { 
     return true; 
    } 

    return false; 
}); 

你.ENV文件將有這兩條線:

APP_NUMBER_COMMA_SEPARATOR="." 
APP_NUMBER_THOUSANDS_SEPARATOR="," 

與您的規則看起來像這樣:

$rules = [ 
    'amount' => 'float|min:0', 
]; 

注意:我只是escapi正確的.。如果你打算使用在正則表達式語法中有特殊含義的字符(例如*或+),你也必須轉義它們。

但由於浮點數550*345,00 (550,345.00)57+44 (57.44)沒有意義我已經忽略了這個問題。

親切的問候

相關問題