沃梦达 / 编程问答 / php问题 / 正文

Preg_Match字符串中的逗号

Commas in preg_match string of words(Preg_Match字符串中的逗号)

本文介绍了Preg_Match字符串中的逗号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在将过滤帖子存储到数据库之前,我先存储它们的列表,然后再针对它们发帖。

我将坏字存储在数组中,并使用管道分隔符进行内爆,以便执行一次检查。

$bad_words_regex = "/" . implode('|', config_item('bad_words')) . "/";

if( preg_match(strtolower($bad_words_regex), strtolower(trim($message))) == FALSE ) {
    // save to database
}

我注意到带有逗号的消息没有保存到数据库中。我想我还应该检查其他字符(-、_、@、#)。

我需要修改第一行,以便当消息包含逗号之类的字符和您认为我会遇到相同问题的其他字符时,它不会返回True。

更新为未保存的示例帖子和一些坏词的数组:

未保存到数据库的示例消息(在句子末尾包含一个空格字符):

This is your last chance to decide between The Car, The Personality and the Lion 

坏字数组(不是完整列表)

//bad words array
$config['bad_words'] = array(
    '2g1c',
    '2 girls 1 cup',
    'acrotomophilia',
    'anal',
    'anilingus',
    'Split',
    'anus',
    'arsehole',
    'ass',
    'asshole',
    'assmunch',
    'auto erotic',
    'autoerotic',
    'babeland',
    'baby batter',
    'ball gag',
    'ball gravy',
    'ball kicking'
);

更新:我发现它找到了两个匹配的实例,pis(剧集中的pis)和trio(单词中的爱国者)。我需要帮助修改正则表达式以搜索整个单词,而不是单词的片段。

推荐答案

正如@ridgerunner在您问题的注释中提到的,正则表达式"或"运算符需要将单词列表括起来。

例如,您当前的regex如下所示:

/word1|word2|word3/

应该是

/(word1|word2|word3)/

要使其与您的PHP代码一起工作,请执行如下操作:

$bad_words_regex = "/(" . implode('|', config_item('bad_words')) . ")/";

这篇关于Preg_Match字符串中的逗号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:Preg_Match字符串中的逗号

基础教程推荐