2016-03-30 31 views
1

Ben laravel doğrulama sistemini kullanıyorum. Ve bir alanın wholesale_price olarak veritabanı ve fiyatı ondalık. Doğrulama için kullanıyorum.Laravel Değil Sıfır Doğrulama

'wholesale_price' => 'required|regex:/^\d*(\.\d{1,2})?$/', 

Ama fiyat 0. olamaz Ve ben bunu nasıl> 0

doğrulamak gerekir. Laravel dk: 1 fonksiyonellik ama bu benim için uygun değil. Ben 0.005 veya 0.02

+1

Özel bir doğrulayıcı kullanın. https://laravel.com/docs/5.2/validation#custom-validation-rules – ceejayoz

cevap

4

Sen regex yapmak zorunda olmamalıdır Bunu çözmek için. Örneğin aşağıdaki testi atın:

$input = ["wholesale_price" => 0.005]; 
$rules = ["wholesale_price" => "numeric|between:0.001,99.99"]; 

sürece senin numeric kuralı gerektiren, daha sonra between senin don' sürece değerini ele alacağız (vb int, float, double) sayı olarak doğrulanan t $0.001 gibi bir dize değeri iletin veya doğrulamadan önce istenmeyen karakterler şeritleyin, bu yöntem 0 üzerindeki herhangi bir şey için true değerine döner ve ayarladığınız maksimum değer (şu anda 99.99, ancak istediğiniz kadar yüksek ayarlayabilirsiniz.)

Basit bir sınama şablonu:

$input = [ 
    "price" => 0 
]; 
$input2 = [ 
    "price" => 0.001 
]; 
$rules = [ 
    "price" => "numeric|between:0.001,99.99", 
]; 

$validator = \Validator::make($input, $rules); 
$validator2 = \Validator::make($input2, $rules); 

dd($validator->passes()); 
// Returns false; 

dd($validator2->passes()); 
// Returns true; 

Not: price Sunucuya o göndermeniz durumunda sadece $ şerit, bir dize değeri ise de çalışır.

Bu yardımcı olur umarım!

+0

Nice trick Bunu beğendim ve benim oyumu aldım –

+0

Teşekkürler: P Neden bu sayısal tablonun gerekliliğinin sebebi karşısında geldi; Eğer sizde yoksa, "arasında" değeri "string" olarak değerlendirir ve strlen() 'değerini kurala göre kontrol eder, bu yüzden strlen (" 0.001 ")' '5'dir ve 0.001 ve 99.99', böylece her zaman geçerliliği geçer. –

+1

İyi teşekkürler. –

0

gibi fiyatlar var olduğundan nasıl bu regex hakkında:

/^\s*(?=.*[1-9])\d*(?:\.\d{1,2})?\s*$/ 

Açıklama:

^   # Start of string 
\s*   # Optional whitespace 
(?=.*[1-9]) # Assert that at least one digit > 0 is present in the string 
\d*   # integer part (optional) 
(?:   # decimal part: 
\.   # dot 
\d{1,2}  # plus one or two decimal digits 
)?   # (optional) 
\s*   # Optional whitespace 
$   # End of string 

Sonuç:

'wholesale_price' => 'required|regex:/^\s*(?=.*[1-9])\d*(?:\.\d{1,2})?\s*$/',