Laravelのバリデーションで制御文字をバリデーションしたいです。
以下の正規表現だと正常な入力でもregexで引っかかります。
HTML
1<input type="text" name="name"> <!-- 制御文字を禁止 --> 2<textarea name="message"></textarea> <!-- 改行タブ以外の制御文字を禁止 -->
PHP
1'name' => ['required', 'string', 'max:10', 'regex:/\A[[:^cntrl:]]{1, 10}\z/u'], 2'message' => ['required', 'string', 'max:300', 'regex:/\A[\r\n\t[:^cntrl:]]{1, 300}\z/u'],
コントローラでpreg_matchを使って検証しました。こちらも引っかかります。
hello と入力した場合
PHP
1dd($request->name); // "hello" 2dd($request->message); // "hello" 3 4preg_match('/\A[[:^cntrl:]]{1, 10}\z/u', $request->name) // 0 5preg_match('/\A[\r\n\t[:^cntrl:]]{1, 300}\z/u', $request->message) // 0
制御文字を入力していないのにどうして引っかかるのでしょうか。
どうすれば制御文字を禁止できますか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/04 13:36