Laravel проверка номера мобильного телефона с форматом и фиксированными цифрами - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть поле ввода tel type. Это для местного мобильного номера в формате x-xxxx-xxx. С этим я получаю проблемы недействительными. Даже при вводе восьми цифр выдается ошибка проверки цифр.

Правило проверки

Я пробовал несколько способов проверки, как показано ниже, но ни один из них не работает.

// without regex
'mobile'     => 'nullable|digits:8',

// regex one
'mobile'     => 'nullable|regex:/^([0-9\s\-\+\(\)]*)$/|digits:8',

// regex two

'mobile'     => 'nullable|regex:/^\d{1}-\d{4}-\d{3}$/|digits:8',

Разметка ввода

Я использую плагин inputmask js, если это необходимо.

<div class="form-group"><label for="mobile">{{__('admin.user.profile.mobile')}}</label>
    <input type="tel" class="form-control" id="mobile" name="mobile"
           value="{{ isset($user) ? $user->profile->mobile : old('mobile') }}"
           placeholder="{{__('admin.user.profile.mobile')}}" data-inputmask="'mask': '9-9999-999'">
    @error('mobile')
    <span class="invalid-feedback d-block" role="alert"><strong>{{ $message }}</strong></span>
    @enderror
</div>

Сообщение об ошибке проверки

The mobile must be 8 digits.

DD

Так что здесь я могу понять причину, возможно, это отправка номера с форматом. Итак, как мне теперь это проверить?

array:14 [▼
  "_token" => "U5F3BkiAryYkaz75R1oraUfcx3ydz6bv6Ac7mw7K"
  "_method" => "PUT"
  "email" => "super@test.com"
  "password" => null
  "password_confirmation" => null
  "role" => "super"
  "first_name" => "Katheryn"
  "last_name" => "Jones"
  "mobile" => "4-6655-499"
  "city" => "Taylorbury"
  "facebook" => "http://fritsch.com/numquam-repudiandae-consectetur-sequi-suscipit-numquam"
  "twitter" => "http://jacobi.com/"
  "youtube" => "https://dubuque.org/explicabo-autem-corporis-distinctio.html"
  "instagram" => "https://www.franecki.com/eos-non-nostrum-quia-commodi-ex-totam"
]

Вопрос:

Как проверить номера мобильных телефонов с фиксированными цифрами и форматом?

1 Ответ

2 голосов
/ 12 апреля 2020

Я пробовал использовать следующие правила, в которых я изменяю правило di git на строку, так как laravel не имеет правила для цифр плюс da sh.

'mobile' => 'nullable | string | min: 10 | max: 10 | regex: / ^ \ d {1} - \ d {4} - \ d {3} $ /',

Возможно выше Решение помогает вам.

Обновление

Чтобы показать пользователю соответствующее сообщение об ошибке, вам необходимо создать пользовательское правило

Выполните следующую команду

php artisan make: rule NumericDa sh

Обновите файл NumericDa sh. php со следующим содержимым

<?php

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class NumericDash implements Rule
{
    private $message = "The :attribute format is invalid.";
    /**
     * Create a new rule instance.
     *
     * @return void
     */
    public function __construct($digitsWithoutDash, $regex)
    {
        $this->digitsWithoutDash = $digitsWithoutDash;
        $this->regex = $regex;
    }

    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        if (strlen(preg_replace('/[^0-9]/', '', $value)) !== $this->digitsWithoutDash) {
            $this->message = "The :attribute must include {$this->digitsWithoutDash} digits.";
            return false;
        }
        if (!preg_match($this->regex, $value)) {
            return false;
        }
        return true;
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return $this->message;
    }
}

и используйте правило, как показано ниже

'mobile' => ['nullable', 'string', new NumericDa sh (8, '/ ^ \ d { 1} - \ d {4} - \ d {3} $ / ')],

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