我试图看看如何验证laravel中的单词计数,例如,如果文本区域只接受250个单词?
有人可以帮助我,我正在使用laravel 4.1
由于
答案 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';
}