如何正确输入标签?

时间:2009-07-13 09:53:08

标签: php tagging explode

我的网页中有一个标记字段,用户可以在其中输入标记,(逗号),与StackOverflow中的标记相同。我正在使用PHP,我正在使用爆炸功能根据逗号分隔用户输入的所有标签,然后将它们添加到我的数据库中的标签表中。

我的代码适用于普通代码,例如,如果用户输入battleship, strategy, sea war然后其工作,但可以说用户已被battleship, strategy, sea war,battleship, strategy, games, sea war, , , , ,battleship, strategy, games,, sea war或任何错误值,那么我将如何检测它,然后只输入数据库中的正确值。

是否可以使用regExp或任何其他方式,请告诉我如何?

6 个答案:

答案 0 :(得分:7)

$tags = "battleship, stragety, ,";

$exp = explode(",", $tags);

$valid_tags = array();

foreach($exp as $tag)
{
 if( ($tag = trim($tag)) != "")
 {
   $valid_tags[] = $tag;
 }
}

将从任何标记中删除空格,如果它有任何文本,标记将被添加到有效数组中:)

答案 1 :(得分:1)

您可以使用正则表达式将字符串拆分为标记,例如:

\s*,\s*

$tags = preg_split('/\\s*,\\s*/', $str);
$tags = array_filter(array_map('trim', $tags));
var_dump($tags);

但是你仍然需要检查标签是否有效。例如,空标记(如foo,,bar中)不是。只需将它们过滤掉,然后将其余部分传递给您的数据库。

或者您使用正则表达式来查找有效标记:

\w+(?:\s+\w+)*

preg_match_all('/\\w+(?:\\s+\\w+)*/', $str, $tags, PREG_PATTERN_ORDER);
var_dump($tags);

答案 2 :(得分:1)

在这种情况下不需要RegExps。 explode提供了代码段,trim删除了空格。如果那样的话,请检查一下。

$tags = explode (",", $posted_tags);
foreach ($tags as $tag) {
    if ($value = trim ($tag)) {
        insert_into_db ($value);
    }
}

干杯,

答案 3 :(得分:1)

$str = "ship,, , , , ,water";

$tags = explode(',', $str);

foreach($tags as $tag) {
    if( $tag ) {
        echo trim($tag) ;
    }
}

答案 4 :(得分:0)

更好的方法是建议用户他们可以添加什么标签 - 轻松你可以做到jquery ajax :) 有人认为像here(ajaxdaddy.com)

答案 5 :(得分:0)

你可以可能侥幸逃脱:

$tags = array_filter(explode(',', $str));

因为(来自array_filter的手册):

  

如果没有提供回调,则将删除所有输入等于FALSE的条目(请参阅转换为布尔值)。

(如果你不介意拒绝'0',那么评估为FALSE的其他值)