簡體   English   中英

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

[英]Regex: Identify phone numbers in different formats

我有一個網站,人們在那里寫笑話。 用戶可以將喜歡的笑話作為短信發送到他們(或他們的朋友)手機。 笑話的發送者(將笑話添加到站點的人)顯示在下面:

笑話#12234

這是身體
開玩笑的

發件人:John

有時人們將其電話號碼用作發件人姓名,這在公共場合是不允許的。 我想確定發件人姓名中是否有電話號碼可以進行審查。 我假設電話號碼大於6位數字。 但是問題是用戶可能會像這樣分隔數字:

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


等等。 與上述格式相似的任何形式都應進行審查。 我試着刪除非數字字符,然后使用正則表達式,但問題是它也提取了:

約翰·約翰·彼得森12345

誰能提供更好的方法?

要保留所有格式,請替換

(\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怎么(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-9-+s()]*$

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM