写文章的用户可以选择写一些标签,标签是这样写的:
标签 1, 标签 2, 标签 3
所以标签的存储方式如下:$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.";
}
它似乎有效,有时...但是你写道:
标签1, DF
它不会给出错误。
有什么建议吗?
$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.";
}
使用此版本,它会在计算长度之前修剪您的字符串。
问题是,通过在输入时在裸逗号上爆炸,例如tag1, df
,可以使生成的数组['tag1', ' df']
- 第二个字符串实际上的长度为 3。
我想到了解决此问题的两种方法:
-
在计算长度之前,只需用
trim
array_map
:$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);
看到它的实际效果。
如果我
理解正确,你说你要确保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.