1

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

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

它不会给出错误。

有什么建议么?

4

3 回答 3

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.";
}

使用这个版本,它会在计算长度之前修剪你的字符串。

于 2012-04-15T23:25:03.413 回答
3

问题是,通过在输入上使用裸逗号爆炸,例如tag1, df您使结果数组成为['tag1', ' df']- 第二个字符串的长度实际上为 3。

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

  1. 只需array_maptrim计算长度之前:

    $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);
    

看到它在行动

于 2012-04-15T23:24:42.157 回答
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.
于 2012-04-15T23:40:41.037 回答