2012-10-17 149 views
4

在我的網站上創建陣列,我讓用戶發送代碼是這樣的:從清潔標籤

tag tagtwo anothertag 

我只想讓他們使用單個空格和字母,所以我想刪除數字,破折號,雙空格等於是無效的字符串將是:

tag  tag2 another-tag 

我有下面的代碼要做到這一點,但我不知道正確的正則表達式來使用。

$tags = strtolower($_POST['imgTags']); 
$tags = preg_replace("/regex/", "", $tags); 
$tagArray = explode(" ", $tags); 

什麼是正確的regEx來做到這一點? 另外,我可能想用e和o替換é和ö。

回答

3

這將刪除任何東西,但字母和空格:

$tags = preg_replace("/[^a-z ]/i", "", $tags); 

,那麼這將崩潰連續的空格:

$tags = preg_replace("/ {2,}/", " ", $tags); 

如果要允許其他類型的空白字符,也與單個空格替換它們,試試這個來代替:

$tags = preg_replace("/[^a-z\s]/i", "", $tags); 
$tags = preg_replace("/\s+/", " ", $tags); 

關於你的最後一句話:有這個沒有通用的方法。你將不得不添加特定的規則。但是,preg_replace_callback可能會幫助您確定未修改的字母。

+0

不錯,但你應該使用\ s來篩選出新行和製表符以及什麼。 –

+0

我以爲他真的只想要普通空間,第一行刪除了所有其他空白字符。 –

+0

無論如何編輯它;) –

0

正則表達式將是

[a-zA-Z ]+ 

這允許大寫或小寫字母和一個空格字符的組合。

+0

而且連續的空格。 –

+0

正如@ m.buettner所說,它可能包含連續的空格,但我也想要與此相反,因爲我正在使用preg_replace。 – BazzyTK

1

僅保存字母和空格使用:

$tags = preg_replace("/[^a-zA-Z\s]/", "", $tags); 

爲了歸位加:

$tags = preg_replace("/\s+/", " ", $tags); 
+0

我不想要數字也沒有連續的空格。 – BazzyTK

+0

我錯過了數字部分,請看我更新的答案。 –

+0

工作,謝謝! – BazzyTK

1

所以我想刪除數字,破折號,雙空格

/([0-9\-]|[\s]{2,})/應該作爲正則表達式

+0

這種方法很有用,但它不會刪除'或é,它會刪除所有空格,即使是第一個。 – BazzyTK

+0

,但完全刪除連續空格而不是將它們摺疊到一個空格? –

+2

這將刪除雙空間而不是將它們轉換爲單曲,否? –

1

首先更換多個空格和製表符用一個:

/([ \t])[ \t]*/$1/ 

然後取代一切,但字母和空格與空:

/[^A-Za-z ]+// 

PHP代碼

$tags = preg_replace('/([ \t])[ \t]*/', '$1', $tags); 
$tags = preg_replace('/[^A-Za-z ]+/', '', $tags); 

輸入

tag  tag2 another-tag 

輸出

tag tag anothertag 
1

這將是簡單的:

要刪除數字和破折號:

$tags = preg_replace("/[0-9\-]/", "", $tags); 

然後刪除多個空格:

$tags = preg_replace("/[\s]{2,}/", " ", $tags); 

REGEX DEMO

+0

這將用空格替換非字母,非空格字符,而不是刪除它們。 –

+0

已更正... @ m.buettner –

+0

現在它將刪除空格而不是將它們摺疊爲一個;) –