私のLaravel 5アプリに次のコードがあります:
public function store(Request $request){
$this->validate($request, ['filename' => 'regex:[a-zA-Z0-9_\-]']);
}
私の意図は、ファイル名に英数字、ダッシュ、アンダースコアのみを含むファイル名を許可することです。しかし、私の正規表現は機能していません。1文字でも失敗します。何が悪いのですか?
パターンが入力文字列全体と一致することを確認する必要があります。また、英数字およびアンダースコア記号を\w
と一致させることができるため、正規表現自体を大幅に短縮できます。
私は提案します:
'regex:/^[\w-]*$/'
詳細:
^
-文字列の開始[\w-]*
-[a-zA-Z0-9_]
範囲または-
sからの0個以上のWord文字$
-文字列の終わり。'alpha_dash'
より優れている理由:このパターンをさらにカスタマイズできます。
laravelルールを使用し、
public function store(Request $request){
$this->validate($request, ['filename' => 'alpha_dash']);
}
組み込みの英数字検証を使用するのが最も簡単な場合があります。
https://laravel.com/docs/5.2/validation#rule-alpha-num
$validator = Validator::make($request->all(), [
'filename' => 'alpha_num',
]);
あなたは正規表現を数量化するのを忘れており、それもまた適切に形成されていませんでした。
public function store(Request $request){
$this->validate($request, ['filename' => 'regex:/^[a-zA-Z0-9_\-]*$/']);
}
これは空のファイル名を受け入れます。空でないものを受け入れる場合は、*
から+
。