2017-10-09 70 views
-4

您好我一直在使用下面的代碼很長一段時間剝離領導和結束逗號

$string = "/,One, Two, Three, Four,,, Five, , Six, , , Seven,./"; 
$regex = "/^[,\s]+|[\s,]+$/"; 
echo preg_replace($regex, ',', $string); 

,但它不再工作,因爲用戶是指有沒有理由好玩輸入查詢逗號所有的時間

所以我嘗試使用這個正則表達式$regex = "/[\s,]+/"

它做了一個非常好的效果,但沒有按照預期。

我想實現的是根本沒有前導或結尾特殊字符,只有字母數字字符。每間隔只有一個逗號,所以我的最終目標將是這樣

/,One, Two, Three, Four,,, Five, , Six, , , Seven,./

One, Two, Three, Four, Five, Six, Seven

如何做到這一點是什麼呢?

+0

$ string中的'/'是什麼? –

+1

與其試圖理解無意義的輸入,如果它不驗證,我會拒絕它。另一方面,你應該重新考慮你如何要求輸入:或許複選框比文本輸入更好。 – jeroen

+0

是否有在實際值中使用多個逗號的情況可能有效? –

回答

1

我想用preg_splitPREG_SPLIT_NO_EMPTYimplode是一個好辦法:

$parts = preg_split('~[^[:alnum:],]*,[^[:alnum:]]*~', $str, -1, PREG_SPLIT_NO_EMPTY); 
$result = implode(', ', $parts); 
+0

這實際上是一個更好的方法來使用,因爲我不需要爆炸的結果,模式是如何工作的? – Axon

+1

@Axon:沒什麼不可思議的,它在子字符串上分割,至少有一個逗號,並且不包含空白部分。 –

+0

如果不是空的,是否可以添加一個換行符替換爲逗號? – Axon

0

使用trim()可以去掉字符串開頭和結尾的句點,逗號和斜線。然後你可以使用preg_replace()消毒逗號和空格的混合物在中間:

$string = "/,One, Two, Three, Four,,, Five, , Thirty One, , Six, , , Seven,./"; 
$regex = "/\s*,[,\s]+/"; 
echo preg_replace($regex, ', ', trim($string, ',./')); 

// "One, Two, Three, Four, Five, Thirty One, Six, Seven" 

編輯如果trim()是不夠的,你需要削減的所有非字母數字字符,您也可以使用表達式爲了那個原因。這是不是很漂亮,但它的工作原理:

$trimmed = preg_replace('/(^[^\w]*)|([^\w]*$)/', '', $string) 
+0

這將在空格處插入逗號。 –

+0

@rickdenhaan工作得很好,但問題是我只想要字母數字字符,有些人可能寫'&'或'{}'或'[]',它會通過。 – Axon

+0

只在開始和結束?或者也在中間? – rickdenhaan

1

使用TRIM()擺脫在開始和結束的符號,然後使用這個正則表達式來轉換不正確的逗號用法來糾正用法。

你可以做到這一點與下面的正則表達式:

echo preg_replace("/((\W{1,}),(\W{1,}))/", ', ', trim($string, ',./')); 

Regex101可以引導您究竟如何在正則表達式的作品。