2012-11-01 114 views
0

我有一個網站,人們在那裏寫笑話。用戶可以將他們喜歡的笑話作爲短信發送給他們(或他們的朋友)手機。並顯示它下面的笑話的發送者(誰加入了笑話網站):

笑話#12234

這是開玩笑的身體


發件人:約翰


有些時候,人們使用他們的電話號碼作爲發件人姓名,這是不允許公開的。我想確定發件人名稱中是否有電話號碼可以對其進行審查。我假設任何大於6位數的電話號碼。但問題是,用戶可能分開的數字,如:

正則表達式:識別不同格式的電話號碼

1234567890應該成爲1234XXX7890
123 456 7890應該成爲123 XXX 7890
123-456-7890
123456-7890


等等。任何類似於上述格式的表單都應該被刪減。我試圖消除非數字字符,然後使用正則表達式,但問題是那麼它也取:

john23 peterson12345

誰能提供一個更好的辦法?

+0

不要刪除所有非數字字符,但只有連字符,括號和空格 – Bergi

回答

0

要保留所有格式,更換

(\d{3}[-\s()]*)\d{3}([-\s()]*\d{4}) 

$1XXX$2 

進一步限制爲10位數字(之前和之後,立即禁止其他號碼),使用負環視斷言:

(?<!\d)(\d{3}[-\s()]*)\d{3}([-\s()]*\d{4})(?!\d) 
^^^^^^^         ^^^^^^ 

最後,如果拼寫錯誤引導用戶在組之間插入空格或符號,例如(123)45 6-7890?爲了理解這些,請執行以下操作:

(?<!\d)((?:\d[-\s()]*){3})(?:\d[-\s()]*){3}((?:\d[-\s()]*){4})(?!\d) 

但是,這可能會「太多」 1-2-3-4-5-6-7-8-9-0。你將不得不確定你想要打的什麼平衡。

+0

非常感謝。正如我所說的問題,電話號碼可以是7到11位數字。此代碼僅適用於10。 –