如何验证laravel中的单词计数

时间:2014-08-22 18:17:01

标签: php laravel laravel-4

我试图看看如何验证laravel中的单词计数,例如,如果文本区域只接受250个单词?

有人可以帮助我,我正在使用laravel 4.1

由于

3 个答案:

答案 0 :(得分:4)

对于Laravel 5.1并使用Lisa和Richard Le Poidevin的建议,我做了基于Laravel 5.1: Validation Docs的nexts步骤,并且一切正常和干净:

在" app / Providers /"中创建了一个新的ValidatorServiceProvider扩展服务提供者。对于所有验证规则,包括执行验证的Validator :: extend方法和返回formmated消息的Validator :: replacer,以便我们告诉用户字数限制。

namespace App\Providers;

use Validator;
use Illuminate\Support\ServiceProvider;

class ValidatorServiceProvider extends ServiceProvider
    {
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot(){
        Validator::extend('maxwords', function($attribute, $value, $parameters, $validator) {
            $words = preg_split( '@\s+@i', trim( $value ) );
            if ( count( $words ) <= $parameters[ 0 ] ) {
                return true;
            }
            return false;
        });
        Validator::replacer('maxwords', function($message, $attribute, $rule, $parameters) {
            return str_replace(':maxwords', $parameters[0], $message);
        });
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register(){
        //
    }
}

然后,在config / app.php中注册服务提供商:

App\Providers\ValidatorServiceProvider::class,

对于验证语言,响应是resources / lang / en / validation.php:

"maxwords" => "This field must have less than :maxwords words.",

答案 1 :(得分:3)

去年遇到这个问题时我最终做的是:

Validator::extend( 'word_count', function ( $field, $value, $parameters ) {
    $words = preg_split( '@\s+@i', $value );
    if ( count( $words ) <= $parameters[ 0 ] ) {
        return true;
    }
    return false;
} );

这会占用任何非空白字符集,并将其视为一个单词&#39;,然后计算结果数。如果它小于发送的最大值($ parameters [0]),则返回true,否则返回false。

它可以与Laravel 4的验证器功能一起使用,但尚未使用Laravel 5进行测试。

答案 2 :(得分:2)

我不认为Laravel有一个特定的方法,但你可以用一些简单的php来做。

在你的控制器中:

public function store(){

    $text = Input::get('textarea');

    if(count(explode(' ', $text)) > 250)
        return 'more than 250 words';

}