web-dev-qa-db-ja.com

Laravelの英数字のみを検証します

私のLaravel 5アプリに次のコードがあります:

public function store(Request $request){
    $this->validate($request, ['filename' => 'regex:[a-zA-Z0-9_\-]']);
}

私の意図は、ファイル名に英数字、ダッシュ、アンダースコアのみを含むファイル名を許可することです。しかし、私の正規表現は機能していません。1文字でも失敗します。何が悪いのですか?

9
Alexander Lomia

パターンが入力文字列全体と一致することを確認する必要があります。また、英数字およびアンダースコア記号を\wと一致させることができるため、正規表現自体を大幅に短縮できます。

私は提案します:

'regex:/^[\w-]*$/'

詳細

  • ^-文字列の開始
  • [\w-]*-[a-zA-Z0-9_]範囲または-sからの0個以上のWord文字
  • $-文字列の終わり。

'alpha_dash'より優れている理由:このパターンをさらにカスタマイズできます。

11

laravelルールを使用し、

    public function store(Request $request){
    $this->validate($request, ['filename' => 'alpha_dash']);
}

英数字、ダッシュ、アンダースコアのLaravel検証ルール

7
Akram Wahid

組み込みの英数字検証を使用するのが最も簡単な場合があります。

https://laravel.com/docs/5.2/validation#rule-alpha-num

$validator = Validator::make($request->all(), [
    'filename' => 'alpha_num',
]);
3
djt

あなたは正規表現を数量化するのを忘れており、それもまた適切に形成されていませんでした。

public function store(Request $request){
    $this->validate($request, ['filename' => 'regex:/^[a-zA-Z0-9_\-]*$/']);
}

これは空のファイル名を受け入れます。空でないものを受け入れる場合は、*から+

1
Daniel Waghorn