2016-03-30 19 views
1

Ich benutze Laravel Validierungssystem. Und ich habe ein Feld ist Datenbank als wholesale_price und Preis ist dezimal. Zur Validierung verwende ich dies.Laravel Not Zero Validierung

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

Aber der Preis kann nicht 0 sein Und ich habe> 0

zu validieren, wie ich das tun kann. In Laravel min: 1 Funktionalität, aber das ist nicht nützlich für mich. Weil ich die Preise wie 0,005 oder 0,02

+1

Verwenden Sie einen benutzerdefinierten Validator. https://laravel.com/docs/5.2/validation#custom-validation-rules – ceejayoz

Antwort

4

Sie sollten nicht regex zu tun haben um das zu lösen. Nehmen Sie den folgenden Test zum Beispiel:

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

Solange Sie die numeric Regel benötigen, dann wird between den Wert behandeln als Zahl validiert (int, float, double, etc.) Solange Ihr don‘ t übergeben Sie einen Zeichenfolgenwert wie $0.001, oder entfernen Sie alle unerwünschten Zeichen vor der Überprüfung, diese Methode wird True für alles über 0 und den von Ihnen festgelegten Maximalwert (derzeit 99.99) zurückgeben, aber Sie können es so hoch wie Sie möchten.)

Hier ist eine einfache Testvorlage:

$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; 

Hinweis: Funktioniert auch wenn price ein String-Wert ist der Streifen nur die $, wenn Sie, dass auf dem Server sind zu senden.

Hoffe, dass hilft!

+0

Nice Trick Ich mag dies und bekam meine Stimme –

+0

Danke: P Stolperte über den Grund, warum diese 'numerische' Regel erforderlich ist; Wenn Sie es nicht haben, behandelt 'between 'den Wert als' string' und überprüft seinen 'strlen()' Wert gegen die Regel, so dass 'strlen (" 0.001 ")' '5' ist und dazwischen fällt '0,001 und 99,99 ', also immer die Validierung bestanden. –

+1

guten Trick danke. –

0

Wie über diese regex:

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

Erläuterung:

^   # 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 

Fazit:

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