题
我在我的网页标签字段,其中用户可以输入标签通过,
(逗号)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其他值)