PHP preg_match and preg_quote do not match the dollar sign

综合编程 2018-05-26 阅读原文

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!

责编内容by:Hello, buddy!阅读原文】。感谢您的支持!

您可能感兴趣的

Modelling quantities – an exercise in design... I recently came across two interesting methods that were part of a bigger class ...
Linux PHP多版本切换 超简单办法 今天在帮别人安装一个不知所谓的东西时碰到,三版本的PHP环境,我感觉那个人也是666哒,他使用的是AMH快速开发工具 有图有真相!!! 然后就...
十张图读懂 PHP、Python、 Ruby 三大语言的差异... 图1、PHP vs Python vs Ruby: 市场份额 图2、PHP vs Python vs Ruby: 主流网站使用情况 ...
What version of PHP should my package support? Everybody likes “the new hotness.” Everyone loves a new car, or a new computer, ...
Create Bootstrap Cards with PHP and MySQL Bootstrap cards is a flexible content container with variety of options like hea...