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!阅读原文】。感谢您的支持!

您可能感兴趣的

Push a specific amount of files into the table I have this piece of code that pushes files into an array that will be send with json. But i need only the first 9 fi...
Create Radio Button Toggle Switch with Bootstrap, ... As we know that Radio buttons are used to limit the user to just make one selection from listed options. The radio butto...
RIPS Technologies: PHP Security Advent Calendar 20... On their blog, RIPS Technologies have shared a wrap-up of their security advent calendar shared at the end of last y...
PHP 对象基础知识 最近开始重新学习对象知识,其实也算是初步深入学习对象和设计模式,希望自己会坚持下去,保持更新 初识PHP对象 还记得,刚开始学习 PHP 的时候,学到到方法和对象时有一个很大的疑问,对象与方法相比较那么麻烦(需要设置属性,给属性赋值...
对5种主流编程语言的吐槽 不可否认,想要成为一名优秀的程序员确实是需要掌握多种编程语言。通过这几年的自虐式学习,小编也慢慢的掌握了这些编程语言。接下来要为大家,介绍五款让人又爱又恨的编程语言! 1.C 语言 C 语言给人的感觉,就是一位神秘莫测而...