Есть ли проверка / функция для обрезки пробелов в предложениях между словами в Laravel - PullRequest
0 голосов
/ 30 сентября 2019

Есть ли проверка для обрезки пробелов в предложениях между словами?

, например,

есть имя поля, и пользователь вводит значение, подобное этому:

" jhon doe cool "

так, как обрезать его так, чтобы при сохранении в базе данных он выглядел так:

"jhon doe cool"

Я знаю trim() функцию иЯ пробовал это и это , но это работает только для пробелов в начале и конце, а не для пробелов между словами

Я использую это в моем контроллере дляпроверка и ввод в базу данных

$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!');

Ответы [ 2 ]

2 голосов
/ 30 сентября 2019

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/

Ps Я не проверял, это даст вам правильный вывод, но должен поставить вас на правильный путь

0 голосов
/ 30 сентября 2019

После выяснения и повторного серфинга в интернете,

Я пошел по тому же пути, что и ссылка * , упомянутая выше , но я добавил несколько строк кода и использовал preg_replace и str_replace в качестве разделителей обрезки,

с помощью команды PHP artisan для создания файла промежуточного программного обеспечения для обрезки данных запроса,

php artisan make:middleware BeforeAutoTrimmer

и редактирования функции, поместите array_walk_recursive внутри оператора if и вызова функции trim, следующей за preg_replace и str_replace, шаблон выглядит как @kyle 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);
    }
}

автоматически удаляет лишние пробелы при каждом вводе в базу данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...