php - Laravel max 验证无法正常工作

标签 php laravel validation laravel-6 rules

大家好,我正在尝试在 Laravel 7 中构建用户管理系统,但在我的注册表单中,我不断收到手机号码输入验证错误。

这是我的注册表

<form method="POST" action="{{ route('register') }}">
                        @csrf

                        <div class="form-group row">
                            <label for="name" class="col-md-4 col-form-label text-md-right">{{ __('Name') }}</label>

                            <div class="col-md-6">
                                <input id="name" type="text" class="form-control @error('name') is-invalid @enderror" name="name" value="{{ old('name') }}" required autocomplete="name" autofocus>

                                @error('name')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="user_type" class="col-md-4 col-form-label text-md-right">{{ __('You Are a') }}</label>

                            <div class="col-md-6">
                                <select id="user_type" class="form-control @error('user_type') is-invalid @enderror" name="user_type">
                                    <option value="">-Select your type-</option>
                                    <option value="Shop Owner">Shop Owner</option>
                                    <option value="Customer">Customer</option>
                                </select>
                                @error('user_type')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>

                            <div class="col-md-6">
                                <input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email">

                                @error('email')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="email" class="col-md-4 col-form-label text-md-right">{{ __('Mobile Number') }}</label>

                            <div class="col-md-6">
                                <input id="mobile" type="text" class="form-control @error('mobile') is-invalid @enderror" name="mobile" value="{{ old('mobile') }}" required autocomplete="email">

                                @error('mobile')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>

                            <div class="col-md-6">
                                <input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="new-password">

                                @error('password')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                        </div>

                        <div class="form-group row">
                            <label for="password-confirm" class="col-md-4 col-form-label text-md-right">{{ __('Confirm Password') }}</label>

                            <div class="col-md-6">
                                <input id="password-confirm" type="password" class="form-control" name="password_confirmation" required autocomplete="new-password">
                            </div>
                        </div>

                        <div class="form-group row mb-0">
                            <div class="col-md-6 offset-md-4">
                                <button type="submit" class="btn btn-primary">
                                    {{ __('Register') }}
                                </button>
                            </div>
                        </div>
                    </form>

这是我的 Controller

protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'mobile'=>['required','numeric', 'min:10','max:12'],
            'user_type'=>['required','string'],
            'password' => ['required', 'string', 'min:8', 'confirmed'],
        ]);
    }

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return \App\User
     */
    protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'mobile'=>$data['mobile'],
            'user_type'=>$data['user_type'],
            'password' => Hash::make($data['password']),
        ]);
    }

现在的问题是我已验证我的手机号码字段最多只能包含 12 个字符

'mobile'=>['required','numeric', 'min:10','max:12'],

但是当我每次运行代码时都会收到验证错误消息,

"The mobile may not be greater than 12."

我的输入是,0774566678

问题是什么?

最佳答案

让我澄清一件事,当您为数字创建验证时,您使用的 max 和 min 将用于最小值和最大值。

因此您可以输入 10 到 12 之间的值。

'mobile'=>['required','numeric', 'min:10','max:12'],

因此,您需要删除数字验证规则并按如下方式使用。

'mobile' => 'required|string|min:10|max:12|regex:/[0-9]{9}/'

或者如果是精确字符

'mobile' => 'required|string|size:10|regex:/[0-9]{9}/'

这是引用。链接 https://laravel.com/docs/7.x/validation#rule-size

关于php - Laravel max 验证无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61038169/

相关文章:

php - 如何使用getColumnMeta?

php - 无法将此差异插入表中

php - 如何将 id 从 while 循环传递到 Controller [laravel]

javascript - 正则表达式 (JavaScript) 创建数据验证,其中数字必须大于 x

php - Laravel - 所有默认验证错误消息的列表

php - 从视频中提取特定帧的最快方法(PHP/ffmpeg/任何东西)

laravel - 如何在laravel中更改不同页面的不同标题

php - 如何计算belongsTo模型laravel的总和

javascript - 必填字段在按键时标记为 ng-valid,即使它为空

java - JPA : Validate fetched field against an Enum