[PHP][Laravel][バリデーション] バリデーション regexでパイプを使いたい

前回のエントリーでregexにパイプを使う必要があり、
そのままLaravelのバリデーションに書いたら上手くいかなかったので対応を記載。

waterfalls.hatenablog.com

【NG】

$request->validate([
    'name'     => 'required|max:25',
    'password' => 'required|confirmed|min:8|max:20|regex:/^.*((?=.*[A-Za-z])(?=.*[0-9])|(?=.*[A-Za-z])(?=.*[!_@])|(?=.*[0-9])(?=.*[!_@])).*$/',
]);

【OK】

$request->validate([
    'name'     => 'required|max:25',
    'password' => ['required','confirmed','min:8','max:20','regex:/^.*((?=.*[A-Za-z])(?=.*[0-9])|(?=.*[A-Za-z])(?=.*[!_@])|(?=.*[0-9])(?=.*[!_@])).*$/'],
]);

regexのパイプがある場合は[]で括って配列にしましょうという話。



詳説 正規表現 第3版

詳説 正規表現 第3版