1

,Web ページにタグ フィールドがあり、StackOverflow で行ったのと同じように、ユーザーはタグを (カンマ) で区切って入力できます。私はPHPを使用しており、爆発関数を使用してコンマに基づいてユーザーが入力したすべてのタグを分離し、それらをデータベースのタグテーブルに追加しています。

私のコードは、ユーザーが入力した場合は正常に機能しますが、ユーザーが入力しbattleship, strategy, sea warbattleship, strategy, sea war,battleship, strategy, games, sea war, , , , ,、またはbattleship, strategy, games,, sea war間違った値を入力した場合、それを検出してデータベースに正しい値のみを入力する方法を教えてください。

regExp やその他の方法を使用することは可能ですか?方法を教えてください。

4

6 に答える 6

7
$tags = "battleship, stragety, ,";

$exp = explode(",", $tags);

$valid_tags = array();

foreach($exp as $tag)
{
 if( ($tag = trim($tag)) != "")
 {
   $valid_tags[] = $tag;
 }
}

タグから空白を削除し、テキストがある場合、タグは有効な配列に追加されます:)

于 2009-07-13T09:57:04.980 に答える
1

正規表現を使用して、文字列をタグに分割できます。次に例を示します。

\s*,\s*

$tags = preg_split('/\\s*,\\s*/', $str);
$tags = array_filter(array_map('trim', $tags));
var_dump($tags);

ただし、タグが有効かどうかを確認する必要があります。たとえば( のようなfoo,,bar)空のタグはそうではありません。それらをフィルタリングして、残りをデータベースに渡すだけです。

または、正規表現を使用して有効なタグを見つけます。

\w+(?:\s+\w+)*

preg_match_all('/\\w+(?:\\s+\\w+)*/', $str, $tags, PREG_PATTERN_ORDER);
var_dump($tags);
于 2009-07-13T09:55:47.493 に答える
1

この場合、正規表現は必要ありません。explodeタグ スニペットを配信し、trim空白を削除します。何か残っているかどうかを確認してください。

$tags = explode (",", $posted_tags);
foreach ($tags as $tag) {
    if ($value = trim ($tag)) {
        insert_into_db ($value);
    }
}

乾杯、

于 2009-07-13T09:59:22.977 に答える
1
$str = "ship,, , , , ,water";

$tags = explode(',', $str);

foreach($tags as $tag) {
    if( $tag ) {
        echo trim($tag) ;
    }
}
于 2009-07-13T10:06:30.093 に答える
0

あなたはおそらく非常に簡潔で逃げることができます:

$tags = array_filter(explode(',', $str));

以来(のマニュアルからarray_filter):

コールバックが指定されていない場合、FALSEに等しい入力のすべてのエントリ(ブール値への変換を参照)が削除されます。

(これは、「0」やFALSEと評価されるその他の値を拒否してもかまわない場合です)

于 2009-07-13T22:28:45.637 に答える
0

より良い方法は、追加できるタグをユーザーに提案することです-jquery ajaxで簡単に実行できます:)ここのように考える人もいます(ajaxdaddy.com)

于 2009-07-13T09:59:17.690 に答える