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

时间:2012-04-15 23:22:30

标签: php arrays explode

撰写文章的用户可以选择编写一些标签,标签写成如下:

  

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

它不会出错。

有什么建议吗?

3 个答案:

答案 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的长度。

有两种方法可以解决这个问题:

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

    $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);
    
  3. <强> 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.