PHP の preg_match は、検証文字の # をコメントとして扱います
PHP の preg_match は、検証文字内の # をコメントとして扱います。検証対象の文字に # が含まれており、# 以降はすべてコメントとして扱われるため、検証に失敗します。これはphpのバグです。
これは実は誤解です。 preg_match は問題ありません。 ajax リクエストを行う場合、パラメーターに # が含まれている場合、後続のパラメーターはすべてフィルターで除外されます。パラメーターに url_encode() を追加するだけで問題ありません。