-1

このような質問をしてしまい、大変申し訳ありません!非常に多くのリソースがありますがRegex、私はそれを使用してドキュメントを理解するのが苦手です。

これは少し緊急です。

ユーザーがファイルをアップロードできるサイトを所有しています。最近、ユーザーが次のような名前のファイルを大量にアップロードし始めました。

1538æŽä»£æ²«&曲婉婷对唱《我的歌声里》追忆罗纳尔多.flv

彼は本当にファンキーなことをやっています。

私は、適切に機能し、ユーザーが奇妙な名前のファイルをアップロードするのを防ぐ正規表現を構築しようとしています。別の質問からこれを見つけました:

function isValid($str) {
return !preg_match('/[^A-Za-z0-9.#\\-$]/', $str);
}

問題は、これは少し厳しすぎることです。スペースは使用できません。

spacesdashes$ signs、およびを許可するように関数を編集する必要がありsingle quotesます。しかし、それ以上ではありません。

これどうやってするの?

助けてくれてありがとう!私のひどい正規表現の知識をお詫びします。

4

1 に答える 1

1

PHP で文字列 (任意の文字列) に一重引用符を追加するには、前にスラッシュを追加して "エスケープ" する必要があります。

'\''
 ^- slash

そうしないと、PHP は文字列定義がどこからどこへ行くのか理解できなくなるため、これが必要です。

および記号は、正規表現の文字クラス内で特別な意味$-持つため、何らかのエスケープも必要です。これも\スラッシュを使用しますが、PHP の一重引用符で囲まれた文字列内にスラッシュを記述するには、別のスラッシュも必要です。

'\\'

したがって、正規表現を構築するには、これらすべてをまとめる必要があります (ダッシュを文字クラスの最後に移動しても、特別な意味はありません)。

'/[^A-Za-z0-9.# \\$\'-]/'
               ^ ^ ^- slash for the single quote
               | `- slashed slash for the $ sign
               `- space

私はこれをテストしていませんが、ご覧のとおり、最初に PHP 文字列のエスケープがあり、次に正規表現パターンのエスケープがあるため、少し複雑になる可能性があります。

于 2012-08-28T06:27:42.630 に答える