1

我的网页中有一个标签字段,用户可以在其中输入用,(逗号)分隔的标签,就像在 StackOverflow 中所做的一样。我正在使用PHP,我使用explode函数根据逗号分隔用户输入的所有标签,然后将它们添加到我的数据库中的标签表中。

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

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

4

6 回答 6

7
$tags = "battleship, stragety, ,";

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

$valid_tags = array();

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

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

于 2009-07-13T09:57:04.980 回答
1

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

\s*,\s*

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

但是您仍然需要检查标签是否有效。例如,空标签(如 in foo,,bar)不是。只需将它们过滤掉并将其余的传递到您的数据库。

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

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

preg_match_all('/\\w+(?:\\s+\\w+)*/', $str, $tags, PREG_PATTERN_ORDER);
var_dump($tags);
于 2009-07-13T09:55:47.493 回答
1

在这种情况下不需要正则表达式。explode提供标签片段,并trim删除空格。只是检查一下,如果那时还剩下什么。

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

干杯,

于 2009-07-13T09:59:22.977 回答
1
$str = "ship,, , , , ,water";

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

foreach($tags as $tag) {
    if( $tag ) {
        echo trim($tag) ;
    }
}
于 2009-07-13T10:06:30.093 回答
0

更好的方法是建议用户他们可以添加哪些标签 - 很容易你可以用 jquery ajax 做到这一点:) 有些人认为就像这里(ajaxdaddy.com)

于 2009-07-13T09:59:17.690 回答
0

可能可以很简洁地摆脱困境:

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

因为(来自手册array_filter):

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

(如果您不介意拒绝“0”和其他评估为 FALSE 的值)

于 2009-07-13T22:28:45.637 回答