You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel:如何在min验证规则中忽略字符串中间的多余空格?

Laravel 验证:合并连续空格后验证最小长度的服务端方案

针对你遇到的问题——输入含多个连续空格的字符串会通过min:20验证,需要在服务端合并连续空格为单个后再校验长度,以下是两种最佳实现方案:

方案一:预处理字段值 + 原生验证规则

直接在验证前对字段值进行清洗,合并连续空格后再用原生min规则验证,适合一次性场景:

表单请求类实现(推荐)

如果使用表单请求类,重写prepareForValidation方法完成字段预处理:

protected function prepareForValidation()
{
    $this->merge([
        // 合并连续空格为单个,同时去除首尾空格
        'somefield' => preg_replace('/\s+/', ' ', trim($this->input('somefield'))),
    ]);
}

public function rules()
{
    return [
        'somefield' => 'required|min:20',
    ];
}

控制器内直接处理

若在控制器中编写验证逻辑,可先处理输入再校验:

$input = $request->all();
// 清洗字段值
$input['somefield'] = preg_replace('/\s+/', ' ', trim($input['somefield']));

// 执行验证
$validated = validator($input, [
    'somefield' => 'required|min:20',
])->validate();

方案二:自定义可复用验证规则

如果需要在多个地方复用该逻辑,建议创建自定义验证规则:

  1. 生成规则类:
php artisan make:rule MinWithSingleSpace
  1. 实现规则逻辑:
<?php

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class MinWithSingleSpace implements Rule
{
    public function __construct(private int $minLength) {}

    public function passes($attribute, $value)
    {
        $processedValue = preg_replace('/\s+/', ' ', trim($value));
        return strlen($processedValue) >= $this->minLength;
    }

    public function message()
    {
        return 'The :attribute must be at least :minLength characters after collapsing multiple spaces to single.';
    }
}
  1. 使用自定义规则:
public function rules()
{
    return [
        'somefield' => ['required', new \App\Rules\MinWithSingleSpace(20)],
    ];
}

效果说明

两种方案都会将示例输入"Extra space."处理为"Extra space.",处理后字符串长度远小于20,会触发min验证失败,符合需求。

内容的提问来源于stack exchange,提问作者suncoastkid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 12:15:31