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);
}
它的作用:
- 将请求替换为输入经过修整的新请求
- 将我不想修剪的所有字段设置为
untrimmable
属性。
- 使用圆点表示法处理嵌套输入。
这里是 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
来管理此功能,例如 trim
或 convert empty string to null
因为中间件在验证之前执行,您可以在验证中获得干净的数据
我是 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);
}
它的作用:
- 将请求替换为输入经过修整的新请求
- 将我不想修剪的所有字段设置为
untrimmable
属性。 - 使用圆点表示法处理嵌套输入。
这里是 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
trim
或 convert empty string to null
因为中间件在验证之前执行,您可以在验证中获得干净的数据