php Laravel中是否有验证/功能来修剪句子中单词之间的空格

ugmeyewa  于 2023-09-29  发布在  PHP
关注(0)|答案(3)|浏览(132)

是否有验证来修剪句子中单词之间的空格?
例如,
有一个字段名,用户输入值如下:
" jhon doe cool "
所以,如何修剪它,以便当它存储到数据库时,它看起来像这样:
"jhon doe cool"
我知道trim()函数,我已经尝试了thisthis,但它只适用于开头和结尾的空白,而不是单词之间的空白
我在我的控制器中使用它来验证和输入数据库

$request->validate([
    'name' => 'required|max:50',
    'srn' => 'required|size:9',
    'email' => 'required|email',
    'major' => 'required',
]);
Student::create($request->all());
return redirect('/students')->with('status', 'Data successfully added!');
dldeef67

dldeef671#

在Laravel 10.x

use Illuminate\Support\Str;

$string = Str::of('    laravel    framework    ')->squish();

文件:https://laravel.com/docs/10.x/strings#method-str-squish

kcugc4gi

kcugc4gi2#

Laravel有一个正则表达式验证器。
在内部,此规则使用PHP preg_match函数。指定的模式应该遵循preg_match所要求的相同格式,因此也包括有效的分隔符。举例来说:'email' => 'regex:/^.+@.+$/i'.
注意:当使用regex / not_regex模式时,可能需要在数组中指定规则,而不是使用管道分隔符,特别是当正则表达式包含管道字符时。
https://laravel.com/docs/6.x/validation#rule-regex
所以:

$request->validate([
    'name' => [
       'required',
       'max: 50',
       'regex:/\s+/'
    ]
]);

“% s”匹配任何空格,“+”表示不限次数。
测试正则表达式的好工具:https://regex101.com/
P.s我还没有测试过,这将给予你正确的输出,但应该把你放在正确的道路上

68bkxrlz

68bkxrlz3#

在弄清楚并再次上网后,
我按照上面的链接i mentioned的方式,但我添加了几行代码,并使用preg_replacestr_replace作为修剪delimeter,
使用PHP artisan命令创建中间件文件来修剪请求数据,
php artisan make:middleware BeforeAutoTrimmer
然后编辑函数,将array_walk_recursive放在if语句中,然后调用trim函数,后面跟着preg_replacestr_replace,模式看起来像@凯尔answer

if ($input) {
    array_walk_recursive($input, function (&$item) {
        $item = trim(preg_replace('/\s\s+/', ' ', str_replace("\n", " ", $item)));
        $item = ($item == "") ? null : $item;
    });

      $request->merge($input);
 }

带有trim方法的类看起来像这样:

<?php

namespace App\Http\Middleware;

use Closure;

class BeforeAutoTrimmer
{

    public function handle($request, Closure $next)
    {
        $input = $request->all();

        if ($input) {
            array_walk_recursive($input, function (&$item) {
                $item = trim(preg_replace('/\s\s+/', ' ', str_replace("\n", " ", $item)));
                $item = ($item == "") ? null : $item;
            });

           $request->merge($input);
        }
      return $next($request);
    }
}

它将自动删除额外的空白每输入到数据库

相关问题