web-dev-qa-db-ja.com

laravel 5.2の電話番号を検証する方法は?

ユーザー入力の電話番号を検証します。番号は正確に11で、01で始まり、値フィールドは数字のみである必要があります。 Laravel検証を使用してどうすればよいですか?

ここに私のコントローラーがあります:

  public function saveUser(Request $request){
        $this->validate($request,[
            'name' => 'required|max:120',
            'email' => 'required|email|unique:users',
            'phone' => 'required|min:11|numeric',
            'course_id'=>'required'
            ]);

        $user = new User();
        $user->name=  $request->Input(['name']);
        $user->email=  $request->Input(['email']);
        $user->phone=  $request->Input(['phone']);
        $user->date = date('Y-m-d');
        $user->completed_status = '0';
        $user->course_id=$request->Input(['course_id']);
        $user->save();
       return redirect('success');

    }
43
User57

考えられる解決策の1つは、正規表現を使用することです。

'phone' => 'required|regex:/(01)[0-9]{9}/'

これは、入力が01で始まり、9つの数字が続くことを確認します。正規表現を使用すると、numericまたはsizeの検証規則は必要ありません。

この検証方法を他の場所で再利用する場合は、電話番号を検証するための独自の検証ルールを作成することをお勧めします。

ドキュメント:カスタム検証

AppServiceProviderbootメソッドで:

Validator::extend('phone_number', function($attribute, $value, $parameters)
{
    return substr($value, 0, 2) == '01';
});

これにより、アプリケーションの任意の場所でphone_number検証ルールを使用できるようになるため、フォームの検証は次のようになります。

'phone' => 'required|numeric|phone_number|size:11'

バリデーター拡張では、$valueが数字で11文字の長さであるかどうかも確認できます。

77
SlateEntropy
Validator::extend('phone', function($attribute, $value, $parameters, $validator) {
        return preg_match('%^(?:(?:\(?(?:00|\+)([1-4]\d\d|[1-9]\d?)\)?)?[\-\.\ \\\/]?)?((?:\(?\d{1,}\)?[\-\.\ \\\/]?){0,})(?:[\-\.\ \\\/]?(?:#|ext\.?|extension|x)[\-\.\ \\\/]?(\d+))?$%i', $value) && strlen($value) >= 10;
    });

Validator::replacer('phone', function($message, $attribute, $rule, $parameters) {
        return str_replace(':attribute',$attribute, ':attribute is invalid phone number');
    });

使用法

このコードをapp/Providers/AppServiceProvider.phpに挿入して、アプリケーションで起動します。

このルールは、上記の特定のパターンに対して電話番号を検証します。
ロングサーチは、多くの国で最も一般的な携帯電話または電話番号に一致します
これにより、アプリケーションの任意の場所でphone検証ルールを使用できるようになるため、フォーム検証は次のようになります。

 'phone' => 'required | numeric | phone' 
26
Nady Shalaby

Laravel 5.5以降では、artisanコマンドを使用して、要件に関するコードを作成して新しいルールを作成し、それが成功するか失敗するかを決定できます。

Ej:php artisan make:rule PhoneNumber

次に、メソッドパスでapp/Rules/PhoneNumber.phpを編集します

/**
 * Determine if the validation rule passes.
 *
 * @param  string  $attribute
 * @param  mixed  $value
 * @return bool
 */
public function passes($attribute, $value)
{

    return preg_match('%^(?:(?:\(?(?:00|\+)([1-4]\d\d|[1-9]\d?)\)?)?[\-\.\ \\\/]?)?((?:\(?\d{1,}\)?[\-\.\ \\\/]?){0,})(?:[\-\.\ \\\/]?(?:#|ext\.?|extension|x)[\-\.\ \\\/]?(\d+))?$%i', $value) && strlen($value) >= 10;
}

次に、通常の検証で行うように、このルールを使用します。

use App\Rules\PhoneNumber;

$request->validate([
    'name' => ['required', new PhoneNumber],
]);

ドキュメント

20
vivoconunxino

required|numeric|size:11の代わりにrequired|min:11|numericを使用します

9
Abhishek

この電話検証パッケージを試すことができます。 Laravel Phone

更新

私は最近別のパッケージを発見しました Lavarel Phone Validator(stuyam/laravel-phone-validator) 、これは無料のTwilio電話検索サービスを使用します

6
aphoe

あなたは簡単に使用できます:

        'mobile_number' => ['required', 'digits:10'],
1
Rishi

電話番号を本当に考えている場合は、電話番号を検証するときに考慮すべきことがたくさんあります。 (特に国際的な)パッケージを使用することは、受け入れられている答えよりもはるかに優れています。正規表現のような単純なものが必要な場合は、@ SlateEntropyが提案したものよりも優れたものを使用することをお勧めします。 ( 電話番号検証の包括的な正規表現

1
ShaneMit