0

フリーフォームのフォークソノミーシステム用に送信されたタグの値をチェックするための正規表現を作成しようとしています。これが私が今持っているものです。

if (!preg_match('/([^-\\a-zA-Z0-9._@\'])+/',$proposedtag)) {
    //true, good
    return true;
} else {
    //false, bad characters
    return false;
}

ハイフン、バックスラッシュ、スラッシュ、az、AZ、0-9、ピリオド、アンダースコア、アットマーク、一重引用符を許可し、その他はすべて禁止します。

否定された文字クラスがこれを進める方法だと確信しています...

ただし、上記のコードでは他の文字 (+ など) が許可されているようですが、その理由はわかりません。また、補足として、SQL インジェクションを誤って許可しないようにしているのかどうかはわかりません。任意のヒント?

4

1 に答える 1

2

これは、キャラクタークラス内のバックスラッシュ文字のエスケープ問題だと思います。代わりにこれを試してください、それは私がそれを与えたテストでよりよく働くようです。バックスラッシュの二重エスケープに注意してください(これは最後に移動しました)。

if (!preg_match('/([^\-a-zA-Z0-9._@\'\\\\])+/',$proposedtag)) {
于 2009-08-07T23:24:53.383 に答える