2010-03-12 40 views
2

我想过滤一下我的标题表单上的一些保留字。筛选一些词

$adtitle = sanitize($_POST['title']); 
$ignore = array('sale','buy','rent'); 
if(in_array($adtitle, $ignore)) { 
$_SESSION['ignore_error'] = '<strong>'.$adtitle.'</strong> cannot be use as your title'; 
header('Location:/submit/'); 
exit; 
  • 如何让这样的事情。如果 用户类型Car for sale销售 将检测为reserved keyword
  • 现在我的当前代码只能检测单个关键字。

回答

4

你可能寻找一个正则表达式:

foreach($ignore as $keyword) { 
    if(preg_match("/\b$keyword\b/i", $adtitle) { 
    // Uhoh, the user used a bad word!! 
    } 
} 

这也将防止一些误报,比如“洪流”不来了作为一个保留字,因为它包含了“租金”。

+0

谢谢埃里克;) – wow 2010-03-12 06:40:29

+0

它可能应该是不区分大小写,也 – 2010-03-12 06:42:52

+0

好一点@Carson – Erik 2010-03-12 07:03:00

1
function isValidTitle($str) { 
    // these may want to be placed in a config file 
    $badWords = array('sale','buy','rent'); 

    foreach($badWords as $word) { 
     if (strstr($str, $word)) return false; // found a word! 
    } 
    // no bad word found 
    return true; 

} 

如果你想匹配的话只有(不是部分匹配以及,如换句话说内),试试这个修改如下

一个
function isValidTitle($str) { 

     $badWords = array('sale','buy','rent'); 

     foreach($badWords as $word) { 
      if (preg_match('/\b' . trim($word) . '\b/i', $str)) return false; 
     } 

     return true; 

    } 
+0

岂不是标志词“洪流”,因为“出租”?这就是为什么我以字界限进行正则表达式。 – Erik 2010-03-12 06:34:58

+0

@Erik是的,但他没有指定是否应该匹配部分单词。如果他愿意,他可以用'preg_match('/ \ b'。$ word。'\ b /')替换。 – alex 2010-03-12 06:37:08

+0

应该可能不区分大小写 – 2010-03-12 06:43:31

1

$ adtitle =消毒($ _ POST [ '标题']);

$ ignoreArr = array('sale','buy','rent'); (!strpos($忽略,$ adtitle)==假)

的foreach($ ignoreArr为$忽略){
如果{

$_SESSION['ignore_error'] = '<strong>'.$adtitle.'</strong> cannot 

是用作您的标题';头像('Location:/ submit /');头像('位置:/提交/');

exit;

这应该有效。虽然没有测试过。

0

怎么这么简单的东西:

if (preg_match("/\b" . implode("|", $ignore) . "\b/i", $adtitle)) { 
    // No good 
} 
+0

警告:implode()[function.implode]:会在那里 – wow 2010-03-12 06:47:33

+0

@bob你在说什么?没有错误。 – 2010-03-12 20:05:40

4

您也可以尝试这样的事:

$ignore = array('sale','rent','buy'); 
$invalid = array_intersect($ignore, preg_split('{\W+}', $adtitle)); 

然后$无效将包含在标题中使用的所有的保留字的列表。如果你想解释为什么标题不能使用,这可能很有用。

编辑

$invalid = array_intersect($ignore, preg_split('{\W+}', strtolower($adtitle)); 
如果你想

区分大小写的匹配。

+1

+1好的解决方案 – 2010-03-12 20:02:17