2016-07-14 11 views
0

ファイルのファイル名を更新するコントローラがあります。最初は、ファイル名を編集するときの特定の検証についてはわかりませんでした。だから私はそれを改名するときにエラーが発生しました。だから今私が行うのは、私の検証で正規表現を実装することです。Windowsファイル名の正規表現laravel 4.2

$rules = array(
     'eFile' => 'required|min:2|max:200| regex: /^(?!\.)(?!com[0-9]$)(?!con$)(?!lpt[0-9]$)(?!nul$)(?!prn$)[^\|\*\?\\:<>/$"]*[^\.\|\*\?\\:<>/$"]+$/ | unique:nsa_fileuploads,filename,' . $id . ',fileid' 
    ); 

正規表現パターン::ここで

は、それがどのように見えるかだ

regex: /^(?!\.)(?!com[0-9]$)(?!con$)(?!lpt[0-9]$)(?!nul$)(?!prn$)[^\|\*\?\\:<>/$"]*[^\.\|\*\?\\:<>/$"]+$/ 

が、一度実行し、私は次のエラーを取得する:

preg_match(): No ending delimiter '/' found

どれでも私が何をしているのかについてのアイデア間違っていますか?

+1

'/'はエスケープされていない可能性があります。これを試してください: '/^(?!\.)(?!com[0-9]$)(?!con$)(?!lpt[0-9]$)(?!nul$)(?!prn $ /] "+ $ /' – Ohgodwhy

+0

こんにちは@Ohgodwhy!私は試しましたが、まだ 'preg_match():終了デリミタなし '/' found'エラーがあります – BourneShady

+0

['〜^(?!\。)(?! com [0-9] $)(?! con $ (?! nul $)(?! prn $)[^ | *?\\:<>/$ "] * [^。| *?\\:<> /$"]+$~'](https://regex101.com/r/aB8hP7/3)。 '/.../'を '〜...〜'に変更してみてください。 –

答えて

1

パターンにパイプ記号が含まれているので、ここで配列を使用できます。たとえそれが交替演算子ではなく、文字クラスの内部であっても、パイプrequires using an array

使用

'eFile' => [ 
    'required', 'min:2', 'max:200', 
    'regex:/^(?!\.)(?!com[0-9]$)(?!con$)(?!lpt[0-9]$)(?!nul$)(?!prn$)[^|*?\\:<>\/$"]*‌​[^.|*?‌​\\:<>\/$"]+$/', 
    'unique:nsa_fileuploads,filename,' . $id . ',fileid' 
] 

あなたが以外の特殊文字をエスケープする必要はありません正規表現自体、ノートのよう\(とも-(つまり、文字クラスの開始/終了時ではない)と、 ^(文字クラスの先頭にない場合)と](文字クラスの先頭にない場合))と/(正規表現の区切り文字なので)正規表現パターン内にあります。