pykend
pykend
发布于 3周前

Laravel 验证规则alpha、alpha_dash、alpha_num验证字母无效,中文也会通过问题解决

/**
     * Validate that an attribute contains only alphabetic characters.
     *
     * @param  string  $attribute
     * @param  mixed   $value
     * @return bool
     */
    protected function validateAlpha($attribute, $value)
    {
        return is_string($value) && preg_match('/^[\pL\pM]+$/u', $value);
    }

源码上可以看出是Unicode匹配的所以中文也就过去了。

解决办法:

app/Providers/AppServiceProvider.php 在这个文件中 引入 use Illuminate\Support\Facades\Validator; 添加自定义验证规则

public function boot()
    {
        // 添加自定义验证规则,允许字母和 - _
        Validator::extend('allow_letter', function ($attribute, $value, $parameters, $validator) {
            return is_string($value) && preg_match('/^[a-zA-Z_-]+$/u', $value);
        });
    }

上述规则是允许字母和 ‘-’,‘_’ 详细自定义规则方法:http://d.laravel-china.org/docs/5.4/validation#custom-validation-rules