我在我的网页标签字段,其中用户可以输入标签通过,(逗号)seprating他们一样,同样在StackOverflow上完成的。我使用PHP和我使用爆炸功能seprating用逗号的基础上,用户enetered所有标签,然后在格兰数据库将它们添加到我的标签表。

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

是否有可能使用正则表达式或任何其他方式,请告诉我怎么样?

有帮助吗?

解决方案

$tags = "battleship, stragety, ,";

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

$valid_tags = array();

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

将从任何标签去除空白和它是否有任何文本,标签将被添加到有效阵列:)

其他提示

没有必要在这种情况下,正则表达式。 explode提供标签片段,并trim删除空格。只是检查,如果再把东西离开了。

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

干杯,

可以使用正则表达式的字符串分割成标签,例如:

\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);
$str = "ship,, , , , ,water";

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

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

更好的办法是建议用户使用哪些代码可以添加 - 容易就可以做到这一点丝毫jQuery的AJAX :) 有些人认为如这里(ajaxdaddy.com)

您可以的可能的逃脱非常简洁:

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

因为(来自手动供 array_filter ):

  

如果没有回调被提供时,输入等于FALSE(见转换成布尔值)的所有条目将被删除。

(这是,如果你不介意的话拒绝“0”,并评估为FALSE其他值)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top