综合编程

PHP preg_match and preg_quote do not match the dollar sign

微信扫一扫,分享到朋友圈

PHP preg_match and preg_quote do not match the dollar sign
0

I’m trying to scan a string to check against a blacklist of words. I’ve used preg_quote
to handle special characters such as an asterisk but it doesn’t seem to work for the dollar sign.

Here is a test I’ve been running:

$string_to_check = 'wordcontaining$';
$naughty_words = array('wordcontaining$', 'a*differentstring');
if(isset($naughty_words)){
    foreach($naughty_words as $word){
        if (preg_match('/b'.preg_quote($word).'b/i',$string_to_check)) {
            var_export(array('found'=> true, 'word'=>$word));
        }
    }
}

which I would expect to return

array (
    'found' => true,
    'word' => 'wordcontaining$',
)

but unfortunately it’s not. If I set $string_to_check = 'a*differentstring'
then everything works as expected.

Have I missed something very obvious here?

b matches a position between a w (word) and a W (non-word)

w is the same as [a-zA-Z0-9_] so $ and space are both non-word, so if the ‘naughty_word’ starts or ends with a symbol your expression can’t match

you have to use something like

preg_match('/s*+'.preg_quote($word).'s*+/i',$string_to_check)
阅读原文...

Hello, buddy!

Planning of Disk Space for Databases

上一篇

新成立的业余兴趣小组

下一篇

您也可能喜欢

评论已经被关闭。

插入图片
PHP preg_match and preg_quote do not match the dollar sign

长按储存图像,分享给朋友