Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Laravel Form Validation, fail if not empty

I have an input field which needs to be empty, otherwise I want the validation to fail. This is an attempt at stopping spam through a contact form.

I've looked at the documentation for the validation but there's nothing to do this, other than the "max" rule, but this doesn't work.

Any other options?

like image 914
Karl Avatar asked Jun 26 '14 21:06

Karl


3 Answers

Here's a clean and (probably) bullet-proof solution:

    'mustBeEmpty'  => 'present|max:0',
like image 119
hktang Avatar answered Nov 11 '22 04:11

hktang


In the method where you are validation, extend/add custom rule:

Validator::extend('mustBeEmpty', function($attr, $value, $params){
    if(!empty($attr)) return false;
    return true;
});

Then you may use this rule like:

protected $rules = array(
    'emptyInputField' => 'mustBeEmpty'
);

Then everything is as usual, just use:

$v = Validator::make(Input::except('_token'), $rules);
if($v->passes()) {
    // Passed, means that the emptyInputField is empty
}

There are other ways to do it without extending it like this or extending the Validator class but it's an easy Laravelish way to do it. Btw, there is a package available on Github as Honeypot spam prevention for Laravel applications, you may check that.

like image 3
The Alpha Avatar answered Nov 11 '22 05:11

The Alpha


For Laravel 8.x and above, you may use the prohibited validation rule:

return [
   'emptyInputField' => 'prohibited',
];
like image 1
Farzan Badakhshan Avatar answered Nov 11 '22 05:11

Farzan Badakhshan