How can I validate input does not contain specific words?

Whilst Laravel has a wide range of validations rules included, checking for the presence of a word from a given list isn't one of them:

http://laravel.com/docs/validation#available-validation-rules

However, Laravel also allows us to create our own custom validation rules:

http://laravel.com/docs/validation#custom-validation-rules

We can create validation rules using Validator::extend():

Validator::extend('not_contains', function($attribute, $value, $parameters)
{
    // Banned words
    $words = array('a***', 'f***', 's***');
    foreach ($words as $word)
    {
        if (stripos($value, $word) !== false) return false;
    }
    return true;
});

The code above defines a validation rule called not_contains - it looks for presence of each word in $words in the fields value and returns false if any are found. Otherwise it returns true to indicate the validation passed.

We can then use our rule as normal:

$rules = array(
    'nickname' => 'required|not_contains',
);

$messages = array(
    'not_contains' => 'The :attribute must not contain banned words',
);

$validator = Validator::make(Input::all(), $rules, $messages);

if ($validator->fails())
{
    return Redirect::to('register')->withErrors($validator);
}