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']、2番目の文字列の長さが実際には3になることです。

これを修正するための2つのアプローチが頭に浮かびます。

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

実際の動作をご覧ください

于 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 に答える