撰写文章的用户可以选择编写一些标签,标签写成如下:
tag1,tag2,tag3
所以标签的存储方式如下:$tags = "tag1, tag2, tag3";
我想确保每个标记至少包含3个字符,因此我需要验证标记。
我试过这个:
$tagsstring = explode(",", $tags);
$tagslength = array_map('strlen', $tagsstring);
if (min($tagslength) < 3) {
echo "Error... Each tag has to be at least 3 characters.";
}
它似乎有效,有时......但是你写的是:
tag1,df
它不会出错。
有什么建议吗?
答案 0 :(得分:4)
$tagsstring = explode(",", $tags);
$trimmedtags = array_map('trim', $tagsstring);
$tagslength = array_map('strlen', $trimmedtags);
if (min($tagslength) < 3) {
echo "Error... Each tag has to be at least 3 characters.";
}
使用此版本,它会在计算长度之前修剪字符串。
答案 1 :(得分:3)
问题在于,通过在tag1, df
之类的输入上使用裸逗号进行爆炸,可以使得结果数组为['tag1', ' df']
- 第二个字符串实际上具有3的长度。
有两种方法可以解决这个问题:
在计算长度之前,只需array_map
trim
:
$tagsstring = explode(",", $tags);
$tagsstring = array_map('trim', $tagsstring);
$tagsstring = array_map('strlen', $tagsstring);
使用正则表达式和preg_split
进行拆分:
$tagsstring = preg_split("/\s*,\s*/", $tags);
$tagsstring = array_map('strlen', $tagsstring);
<强> See it in action 强>
答案 2 :(得分:1)
如果我理解正确,你说要确保I want to make sure, every tag has a minimum of 3 characters
如果您只担心alphabetical
章程,那么它就是一个不同的游戏,意味着
tab1
有效
tab200
有效
t299
无效
ta444
无效
如果这是您想要的,那么您可以使用此
$tags = "tag1, tag2, ta11 ,tag3 , df ";
$tags = explode ( ",", $tags );
function checker($tag) {
preg_match_all ( '/[a-zA-Z]/u', $tag, $matches );
return count ( $matches [0] );
}
foreach ( $tags as $tag ) {
if (checker ( $tag ) < 3) {
echo "Error... Each tag ($tag) has to be at least 3 characters.\n";
}
}
输出
Error... Each tag ( ta11 ) has to be at least 3 characters.
Error... Each tag ( df ) has to be at least 3 characters.