我想从文本中提取有效(基于格式)手机号码。
e.g。 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 0123 456 7890, 01234 567890 "
// + "United States (987) 456 7890, (987)-456-7890+ etc."
答案 0 :(得分:1)
您可能需要检查这是否符合您的需求:A comprehensive regex for phone number validation
答案 1 :(得分:1)
根据经验,我知道这在我的手机操作系统中是如何工作的。它查看足够长的数字序列,由一组允许的字符分隔。
原则上类似:
[\+]?([0-9]|[\(\).- ]){min,max}
这个正则表达式不是最理想的,因为它也寻找长序列的分隔符字符。您可能还需要过滤掉这些结果。
一种非常简单的方法,有一些误报,但误报是IMPO比错过更好。
答案 2 :(得分:1)
您不应该使用您获得的样本列表作为实际手机号码的指南。 例如,为荷兰显示的数字序列不正确,因为它不仅涵盖移动电话号码,而是涵盖所有常规电话号码(它不包括适用不同规则的0800和0900号码等)并且缺少元素甚至为此。 我只能认为该列表对于其他国家来说同样不正确(当然,它并不完整,因为它不包括所有国家,但也许您只发布了一个片段)。
要解析电话号码,您必须首先删除可能是电话号码的所有空格和其他格式字符,然后检查它是否具有正确的长度,然后尝试推断它是否包含国家代码与否。 如果它包含国家代码但不以00或+开头(两者都用于表示国际号码),那么它可能不是电话号码。 它是否包含区号?如果是这样,区域代码是否与移动电话相关联(例如在荷兰,所有移动电话号码都有区号06,但过去并非总是这样,所以如果你有一个旧文件06区号可能反正不是手机号码。 在您推断出(并且AFAIK手机号码始终包含区号)之后,您必须检查剩余号码是否构成可能是实际电话号码的内容,而不包含基于号码长度的区号(提示:区号+数字在这里必须长10,我想到处都是。)
同时考虑到不同国家甚至某些国家的不同网络规则可能会有所不同。
当然,如果你发现一个看起来像有效电话号码的号码,它仍然可能不是。 它可能是其他一些看起来像电话号码的号码但不是。
答案 3 :(得分:1)
在这种情况下,简单搜索所有匹配的字符串格式是不正确的。最佳方法是使用正则表达式查找电话号码的所有匹配项,但Blackberry java没有处理正则表达式的内置功能。</ p>
但是你可以使用第三方库来实现RegEx处理的J2ME,smth。比如this。
答案 4 :(得分:0)
// Regex - 查看新加坡有效的手机号码
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;
}
}