2011-09-07 97 views
4

存在這個問題的許多變化,我嘗試了幾個生成器,但我似乎無法找到與此匹配的正則表達式。假設我有一個類似「345-324-3243 X039」的電話號碼,我想刪除除數字,字母x和加號(以國際號碼顯示)之外的所有內容。刪除一切,但數字,字母x和加號(正則表達式,PHP)

這裏是我當前的非工作正則表達式和代碼:

$phone = "345-324-3243 X039"; 
preg_replace('[^\d|x|\+]', '', $phone); 

我希望它出來「3453243243X039」,而是我得到「30234-2349」。

回答

6

丟失|,因爲它是字符類中的一個字面值,請確保捕獲大寫字母「X」(連同小寫字母「x」),使用正則表達式「/ quotes /」(否則它會被視爲「[行情]」)和使用結果

$phone = "345-324-3243 X039"; 
$phone = preg_replace('/[^\dxX+]/', '', $phone); 
// $phone is 3453243243X039 

編碼愉快。

1

從您的正則表達式中刪除|,並跳過+

+1

'+'已經被轉義,儘管它不需要在字符類中。您對「|」是不必要的是正確的,但它不應該影響此輸入的結果。 –

1

因此,您不僅在結果中獲得剩餘的-個字符,而且完全不同的數字?這對我來說很奇怪。您只需刪除字符即可從345-324-3243 X039得到30234-2349;該輸入中唯一的0即將結束。這幾乎就像人物被洗牌一樣被刪除。

我注意到你的模式沒有正則表達式分隔符。我甚至不知道這會是什麼效果,因爲我不記得曾經試過它,但這是你的正則表達式中唯一的功能問題。字符類中的|將被解釋爲文字|字符,但這不會影響您發佈的示例輸入的結果。

我會使用的代碼是這樣的:

$phone = preg_replace('/[^\dx+]/i', '', $phone); 

我裹正則表達式中/.../分隔符,刪除|,轉義的+(應該不會有字符類中的任何效果)並使其不區分大小寫以捕捉大寫字母X.

相關問題