2009-08-07 9 views
0

フリーフォームのfolksonomyシステムのために提出されたタグの値をチェックするための正規表現を作成しようとしています。ここに私が今いるものがあります。folksonomyタグのチェック正規表現

if (!preg_match('/([^-\\[email protected]\'])+/',$proposedtag)) { 
    //true, good 
    return true; 
} else { 
    //false, bad characters 
    return false; 
} 

は、私ができるようにしたい:ハイフン、バックスラッシュ、スラッシュ、-Z、A-Z、0-9、期間は、記号、および単一引用符で、アンダースコア、および他のすべてを禁止します。

私のコードは、上記(例えば+など)他の文字を許可しているようだ、と私はなぜわからないしかし、私は...

否定文字クラスは、この上で移動するための方法であるかなり確信しています。 また、誤ってSQLインジェクションを許可していないことを確認しているかどうかは分かりません。任意のヒント?

答えて

2

私はそれがあなたのキャラクタークラス内のバックスラッシュ文字とのエスケープ問題であると信じています。代わりにこれを試してみてください。それは私がそれを与えたテストでうまくいくようです。バックスラッシュ(私は最後に移動しました)のダブルエスケープに注意してください:

if (!preg_match('/([^\[email protected]\'\\\\])+/',$proposedtag)) { 
+0

これまでのところ私のために働いています。しかし、私はこれに変更しました: '/([$\-\/a-zA-Z0-9\[email protected]\'\\\])++/'はスラッシュを含みます。 – jjclarkson

+0

チェックマークを押す前にもう少しテストを実行します;) – jjclarkson