我已經得到了一些工作代碼,但我需要有人來幫助解釋爲什麼它可以工作!正則表達式只允許字母數字,逗號,連字符,下劃線和分號
如果它不是az,AZ,0-9,逗號,分號,下劃線或連字符(最終應代表單個用戶名或一個用戶名),則使用PHP替換字符串中的任何內容逗號/分號分隔的用戶名列表)。
以下工作:
$data = preg_replace('/[^,;a-zA-Z0-9_-]/s', '', $data);
但以下不會:
$data = preg_replace('/[^a-zA-Z0-9_-,;]/s', '', $data);
爲什麼會這樣,只有當逗號和分號是在開始工作?把它們放在最後似乎會破壞事情(這是我在遇到/ [^ a-zA-Z0-9 _-]/s時最初嘗試過的東西
另外,我還使用以下內容修剪任何尾隨分號(複數)或逗號(複數),有人可能能夠提出更有效的和/或優雅的方式來做到這一點?:
if(preg_match('/;$/', $data))
{
$data = rtrim($data, ';');
}
if(preg_match('/,$/', $data))
{
$data = rtrim($data, ',');
}
感謝所有幫助:)
_「從_ 'to',''_ _:有一個非常明確的進程:它基於Unicode表。然而,在這種情況下,'_'在Unicode表中是_after_',',所以範圍是不可能的。 – Xufox 2015-10-27 21:40:34
@Xufox - 恩,那會讓它迴歸,不是嗎? ;)關鍵是沒有任何正則表達式引擎可以理解的進程。但是你是對的,(從另一個方向看,這是一個有效的進展)(http://rextester.com/YGC93292),從','到'_'。直到現在我還不知道,謝謝! – 2016-03-14 15:33:26