2009-07-13 10 views
1

私は自分のウェブページにタグフィールドを持っています。そこには、ユーザが(カンマ)で区切ったタグを入力することができます。これはStackOverflowと同じです。私はPHPを使用しています。私は、爆発関数を使用してカンマを基にユーザーが入力したすべてのタグをsepratingしてから、それらをデータベースのタグテーブルに追加しています。タグを正しく入力する方法は?

私のコードは、ユーザーがその作業後、battleship, strategy, sea warを入力した場合のような通常のタグのための完璧な作業していて、ユーザーはbattleship, strategy, sea war,またはbattleship, strategy, games, sea war, , , , ,またはまたは任意の誤った値をenetered言うことができます、そして、どのように私はそれを検出して、唯一の正しい値の罪を入力しますされデータベース。

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

+1

タグはStackOverflowの中にカンマで区切ってarn't、彼らは?それはスペースだと思った... – Svish

+0

はい、それらはスペースで区切られています。 – Prashant

答えて

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

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

$valid_tags = array(); 

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

任意のタグから空白を削除しますが、それは任意のテキストを持っている場合、タグが有効な配列に追加されます:)

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

私は、誰かが最後にダブルスペースまたはシングルスペースを入力すると、簡単にトリムすることができるので、SOがスペースを使ってタグを分離していると思います。 ? – Prashant

+0

あなたはカンマとスペースでもできます: 'trim($ str、 '、')'。 – Gumbo

0

の方法は、彼らが追加することができますどのようなタグをユーザーに提案することであるベター - 簡単にあなたがそれを行うことができます聖霊降臨祭のjqueryのAJAX :) は、いくつかはhere(ajaxdaddy.com)のように考える

1

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

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

乾杯、

1
$str = "ship,, , , , ,water"; 

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

foreach($tags as $tag) { 
    if($tag) { 
     echo trim($tag) ; 
    } 
} 
+2

誰かが "船、戦闘、海軍"を入力した場合に、挿入する前にタグをトリムすることができます –

+0

ありがとうkuroki。私は編集しました。 – sqram

+0

isset()は何をしているのかよく分かりません。 $ tagは空の文字列であっても、とにかく設定されます。ありがとうございました。 – Boldewyn

0

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

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

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

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

(それはあなたが「0」を拒絶する気にしない場合だと、FALSEに評価する他の値)

関連する問題