

Laravelを使って、入力フォームを作成しています。  
バリデーションのルールで正規表現を使って、 **４桁の数字、または空欄**
を指定して、入力チェックを行いたいのですが、regexを指定した時点で空欄がバリデーションに引っかかってしまいます。

例えば、

[code]

    $rules = [
        'value1' => ['regex:/^\d{4}$/'],
        'value2' => ['regex:/^(\d{4})?$/']
        'value3' => ['regex:/^(\d{4}|\s*)$/'],
        'value4' => ['regex:/^(\d{4}|\n*)$/'],
        'value5' => ['regex:/^(\d{4}| *)$/']
    ];
    
[/code]

このような方法は試しましたが、空欄で送信するとバリデーションに引っかかります。  
この他にも考えられる方法は試してみましたが、出来ません。  
そもそもregexを設定した時点で空欄も無効になっている気がします。

[code]

    'value' => ['regex:/\s*/']
    
[/code]

ちなみに\dを抜いて、↑のような方法や

[code]

    'value' => ['regex:/.*/']
    
[/code]

↑も試しましたが、両記とも全角スペースだと通りますが、半角スペース、空欄の場合はダメでした。

どのように設定すれば良いのでしょうか？


CC BY-SA 4.0
2018-10-01T09:45:30.450
48869
2018-10-01T10:22:20.613
2018-10-01T10:22:20.613
30313
30313
question
php laravel
Laravelのバリデーションでregexを指定すると、入力フォームで空欄が送信できなくなる。


nullableを使うことで設定することが出来ました。

[code]

    'value' => ['nullable','regex:/^\d{4}$/'],
    
[/code]

正規表現に付け足すのではなく、1つのバリデーションを設定します。

regex内で **| (パイプ)** を使う際は、バリデートを分けるために **| (パイプ)**
が使用できないため配列型で設定しますが、この場合必要ないので、

[code]

    'value' => 'nullable | regex:/^\d{4}$/',
    
[/code]

これで出来ました。  
ありがとうございました。


CC BY-SA 4.0
2018-10-01T10:20:03.503
48872
2018-10-01T10:20:03.503
30313
48869
answer