4

文字列内の特定の文字のみを許可したいのですが、preg_matchで簡単にできることはわかっていますが、この関数は何年も前から理解できませんでした :/

私が言ったように、何百万もの preg_match の例を見ましたが、私は自分のものを構築したいので、許可したいのは:

1) 大文字と小文字のすべての英字と数字

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890

2) すべてのアラビア文字と数字

いつでもどこでも

3) 以下の特殊文字

,.()/-+&Ì

他に削除したいものはあります。

4

1 に答える 1

6

最初に正規表現について学ぶ必要があります。これらはプログラミングの一般的な概念であり、PHP マニュアルよりも読みやすい場所があります。regular-expressions.infoを試してください。

特定の質問については、文字クラス パターンが必要です[...]。括弧内の任意の文字に一致します。先頭にハットを付けて記述すると、括弧内にない任意の文字に一致します: [^...]. 一致しないすべての文字を何も置き換えたくないので、次の関数を使用できますpreg_replace

preg_replace("/[^...]/gu", "");

スラッシュは必須の区切り記号です (スラッシュは伝統的なものですが、他にも使用できるものがあります)、「g」は「グローバル」を意味し、「最初のものだけでなく、すべての出現箇所を置き換える」、「u」は「Unicode」を意味します。 、これにより、最後にアラビア文字とその奇妙な特殊文字をキャッチできます。

ここで、ドットを配置したすべての文字を一覧表示できます。または、文字範囲を指定できます。たとえば、[^a-zA-Z0-9,.\/+&-]英数字の任意の文字と、末尾の特殊文字 :p を除くすべての特殊文字に一致します。バックスラッシュを使用してスラッシュをエスケープする必要があることに注意してください (そうしないと正規表現が終了するため)、最後にマイナス記号を付ける必要があります (そうしないと、文字範囲として解釈されます)。必要に応じて他の言語に拡張できます (私はアラビア語のエンコーディングに精通していません)。

于 2012-05-27T18:54:57.870 に答える