Laravel 5 验证 Trim

Laravel 5 Validation Trim

我是 Laravel 5 的初学者。

如何删除验证器中的空格??我已经阅读了文档,但是 trim(删除空格)没有验证器。

这是我的规则

$rules = [
        'name' =>'required',
        'email' => 'required|email',
        'address' => 'required',
        'phones' => 'required'
    ];

感谢您的回答。

更改任何输入数据不是验证器的工作。 Trim 验证器存在于 CodeIgniter 中,但对我来说这不是执行 trim.

的正确位置

你可以自动trim所有输入,使用这个:

Input::merge(array_map('trim', Input::all()));

现在完成剩下的编码工作:

$username = Input::get('username'); // it's trimed 
// ...
Validator::make(...);

您可以使用以下代码trim所有字符串输入(因为您可能在输入中有数组)

    // trim all input
    Input::merge(array_map(function ($value) {
        if (is_string($value)) {
            return trim($value);
        } else {
            return $value;
        }
    }, Input::all()));
public function formatInput()
{
  $input = array_map('trim', $this->all());
  $this->replace($input);
  return $this->all();
}

在 Laravel 5.2 或 5.3 中,您可以使用 trim 删除 space 像这样

$input = array_map('trim', $request->all());

因此这将删除所有已发布的 space 表单输入,验证将正常工作

我扩展了 FormRequest class 并覆盖了在验证发生之前调用的 prepareForValidation 方法。

// anything I don't want trimmed here
protected $untrimmable = [];

// replace the request with trimmed request here
protected function prepareForValidation()
{
    return $this->replace($this->trimData($this->all()));
}

// recursively trim the fields in the request here
protected function trimData($data,$keyPrefix = '')
{
    $trimmedFields = array_map(function($value,$field) use ($keyPrefix){
        // if the value is an array handle it as
        // a request array and send along the prefix
        if(is_array($value)){
            return $this->trimData($value,$this->dotIndex($keyPrefix,$field));
        }

        // if the field is not in the specified fields to be
        // left untrimmed
        if(
            !in_array($this->dotIndex($keyPrefix,$field),$this->dontTrim) && 
            !in_array($this->dotIndex($keyPrefix,$field), $this->untrimmable)
        ) {
            return trim((string) $value);
        }

        return $value;

    }, $data,array_keys($data));

    return array_combine(array_keys($data),$trimmedFields);
}

它的作用:

  1. 将请求替换为输入经过修整的新请求
  2. 将我不想修剪的所有字段设置为 untrimmable 属性。
  3. 使用圆点表示法处理嵌套输入。

这里是 link 要点 https://gist.github.com/msbrime/336a788c7cced2137bdc7896c1241239

$data = $r->all();
foreach ($data as $key => $value) {
if($value!=""){ //If your primaryKey id is autoincrement
   $data[$key] = preg_replace('/\s{2,}/',' ',$value);
}
}
$variable = new modelName($data);
$variable->save();

//Here Parameter Explaination
 => '/\s{2,}/' Pattern must write between '/ /' and \s{2,} means 2 or more than 2 spaces sholud be trim
 => ' ' second parameter is with. Means 1st parameter replace with 2nd parameter(here, one space)
 => $value is variable which is trim

您可以在请求文件中使用它。

$input = request()->all();
$input['url'] = trim($input['url']);
request()->replace($input);

您还可以在请求文件中创建一个 all() 函数来更新请求参数:

 public function all()
    {
        $all = parent::all(); // $this->all();
        $all['new_key'] = "new_data";
        $all['old_key'] = "new_data";

        return $all;
    }

由于文档 laravel HTTP Request 默认 laravel trim 所有请求数据。


Trim 验证部分的请求太脏了。 您可以使用 middleware

来管理此功能,例如 trimconvert empty string to null

因为中间件在验证之前执行,您可以在验证中获得干净的数据