我的网页中有一个标记字段,用户可以在其中输入标记,
(逗号),与StackOverflow中的标记相同。我正在使用PHP,我正在使用爆炸功能根据逗号分隔用户输入的所有标签,然后将它们添加到我的数据库中的标签表中。
我的代码适用于普通代码,例如,如果用户输入battleship, strategy, sea war
然后其工作,但可以说用户已被battleship, strategy, sea war,
或battleship, strategy, games, sea war, , , , ,
或battleship, strategy, games,, sea war
或任何错误值,那么我将如何检测它,然后只输入数据库中的正确值。
是否可以使用regExp或任何其他方式,请告诉我如何?
答案 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的其他值)