2010-02-23 30 views
2

我想從文本中提取有效的(基於格式)手機號碼。如何識別給定文本中的手機號碼?

例如I/O一些文字(987)456 7890,(987)-456-7890又有些文字

O/P 9874567890 9874567890

問題,也有遍佈世界就像許多有效的移動格式。

text = "Denmark 11 11 11 11, 1111 1111 " 
     // + "Germany 03333 123456, +49 (3333) 123456 " 
     // + "Netherlands + 31 44 12345678 Russia +7(555)123-123 " 
     // + "spain 12-123-12-12 switzerland +41 11 222 22 22 " 
     // + "Uk (01222) 333333 India +91-12345-12345 " 
     // + "Austrailia (04) 1231 1231 USA (011) 154-123-4567 " 
     // + "China 1234 5678 France 01-23-45-67-89 " 
     // + "Poland (12) 345 67 89 Singapore 123 4567 " 
     // + "Thailand (01) 234-5678, (012) 34-5678 " 
     // + "United Kingdom," 
     // + "United States (987) 456 7890, (987)-456-7890+ etc." 
  1. 如何覆蓋所有的移動格式?
  2. 手機號碼的最小和最大長度(帶或不帶國家代碼)?
  3. 如何識別手機號碼是否有國家代碼?

回答

1

您可能要檢查,如果這符合你的需求:A comprehensive regex for phone number validation

+1

沒有內置功能來處理正則表達式的黑莓。 – 2010-02-23 09:07:17

+0

我的問題仍然沒有完全解決,因爲移動格式有很多變化和類似的主題也很好的討論。所以我會接受你的答案。 – Vivart 2010-02-23 18:08:22

1

根據經驗,我知道這個作品在我的手機操作系統。它看起來足夠長的數字序列,由一組允許的字符分隔。

原則是這樣的:

[\+]?([0-9]|[\(\).- ]){min,max} 

這正則表達式是不理想的,因爲它也尋找分離字符的長序列。您可能還需要過濾這些結果。

一個非常簡單的方法有一些誤報,但誤報IMPO比錯過更好。

1

您不應該使用您獲得的樣本列表作爲實際手機號碼的指南。 例如,荷蘭顯示的號碼順序不正確,因爲它不包括移動電話號碼,而是所有普通電話號碼(它不包括諸如0800和0900號碼等不同規則適用的號碼)並且缺失即使是這樣的元素。 我只能假設這個列表對於其他國家來說同樣是不正確的(當然,它並不完整,因爲它沒有涵蓋所有國家,但可能只發布了一個片段)。

要解析電話號碼,您必須先刪除可能是電話號碼的所有空格和其他格式字符,然後檢查它是否具有正確的長度爲1,然後嘗試推斷它是否包含不是國家代碼。 如果它包含國家代碼,但不以00或+開頭(均用於表示國際號碼),它可能不是電話號碼。 它包含區號嗎?如果是這樣,是與移動電話相關的一個區號(例如在荷蘭,所有的移動電話號碼都有區號06,但過去情況並非總是如此,所以如果你有一箇舊的文件,06區號可能 在您推斷出(並且AFAIK手機號碼總是包含區號)之後,您必須檢查剩餘號碼是否構成某個可能是實際電話號碼的號碼,而不是基於長度的區號的數字(提示:地區代碼+數字在這裏必須是10長,而且我認爲無處不在)

而且所有的同時考慮到規則可能會因不同國家或甚至不同網絡一些國家。

當然,如果你發現一個看起來像一個有效的電話號碼,它仍然可能不是。 它可能是一些其他的數字,只是看起來像一個電話號碼,但不是。

+0

他的瑞士名單也是錯的。在我看來,可靠地檢測電話號碼已經夠困難的了。也檢測國家代碼。當前綴可能隨時發生變化時,檢測手機號碼似乎是非常不可能的 - 或者最好是脆弱的。 – Benjol 2010-02-23 10:41:44

+0

通過該列表我只是想給我一個暗示,我想要的。而不是寫一些垃圾文本,我給了國名。 – Vivart 2010-02-23 18:00:01

1

在這種情況下簡單搜索所有匹配的字符串格式是不正確的。最佳方式是使用正則表達式查找電話號碼的所有匹配項,但是Blackberry Java沒有內置功能來處理正則表達式。

但您可以使用第三方庫進行RegEx處理的J2ME執行smth。像this

+0

感謝yeti你已經解決了我的另一個問題。我還在尋找第三方RegEx庫。 – Vivart 2010-02-23 17:55:26

0

//正則表達式 - 檢查新加坡有效的手機號碼

public static boolean isSingaporeMobileNo(String str) { 
     Pattern mobNO = Pattern.compile("^(((0|((\\+)?65([- ])?))|((\\((\\+)?65\\)([- ])?)))?[8-9]\\d{7})?$"); 
     Matcher matcher = mobNO.matcher(str); 
     if (matcher.find()) { 
      return true; 
     } else { 
      return false; 
     } 
    } 
+0

不幸的是,這些類在BlackBerry Java中不可用。 – 2014-03-12 09:17:36