PHP 计算数组/字符串(标签)中每个值的长度


PHP Count the lenght of each value in a array/string (tags)

写文章的用户可以选择写一些标签,标签是这样写的:

标签 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。

我想到了解决此问题的两种方法:

  1. 在计算长度之前,只需用trim array_map

    $tagsstring = explode(",", $tags);
    $tagsstring = array_map('trim', $tagsstring);
    $tagsstring = array_map('strlen', $tagsstring);
    
  2. 使用正则表达式和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.