2009-07-13 77 views
1

我在我的網頁中有一個標籤字段,用戶可以通過,(逗號)輸入標籤分隔標籤,與StackOverflow中的標籤字段相同。我使用的是PHP,我使用爆炸函數分隔用戶發送的所有標記,然後將它們添加到數據庫中的標記表中。如何正確輸入標籤?

我的代碼是正常的標籤工作完美的一樣,如果用戶輸入battleship, strategy, sea war那麼它的工作,但可以說用戶enetered battleship, strategy, sea war,battleship, strategy, games, sea war, , , , ,或或任何錯誤的值,那麼我將如何檢測,然後只輸入正確的值罪數據庫。

是否有可能使用regExp或其他任何方式,請告訴我如何?

+1

標籤arn't由逗號分隔的StackOverflow,是什麼人?認爲這是空格... – Svish 2009-07-13 10:41:17

+0

是的,他們是空間分隔。 – Prashant 2009-07-13 12:02:24

回答

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 2009-07-13 09:58:30

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

您可以可能逃脫非常簡潔:

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

因爲(從手冊array_filter):

如果未提供回調,則輸入的所有輸入等於FALSE(請參閱轉換爲布爾值)將被刪除。

(那是,如果你不介意的話拒絕「0」,並評估爲FALSE其他值)