格式化电话号码

时间:2011-01-20 16:00:25

标签: php mysql regex

我必须格式化电话号码列表,并且我希望从号码中提取和分离前缀以便更好地查看。
我有一个所有可能前缀的列表,但没有常规模式 我的意思是,我可以有这些数字:

00 - 12345(短前缀)
0000 - 12345(长前缀)

我该如何管理?数字很​​简单,没有任何特殊字符(即没有/ \ - 。,ecc ecc) 前缀是这样的:

030
031
0321
0322
...
...

大部分时间我都有客户的城镇(这不是必需的)所以,通常我可以从那里获得前缀,但这不是一个确定的事情,因为 town < / em>和电话无法链接。

==编辑==
前缀列表长231个条目。也许我会添加更多东西,所以把300作为安全值 此外,前缀仅来自一个国家(意大利)
我必须保存普通数字而不使用任何分隔符,以便用户可以搜索它。事实上,如果他们放置分隔符,他们将永远无法再找到它。

更多信息
前缀ALWAYS以前导 0 开头,其长度范围为2-4

但是我研究这个东西越多,我就越觉得我无法解决这个问题:(

4 个答案:

答案 0 :(得分:1)

由于extremely varied telephone number formats used around the world,正确解析放入系统的任何电话号码可能会很困难。

我不确定它是否会让你的问题变得更容易,但我认为从从右到左解析对你来说可能更容易,因为它是前缀长度未知

答案 1 :(得分:0)

多么痛苦。我会使用逻辑漏斗来缩小可能的选择范围,最后做出最佳猜测。

首先,测试前几个数字是否可以匹配前缀列表中的任何内容。对于一些人来说,希望只有一个前缀可能是正确的。

然后,也许您可​​以使用该城市来消除来自完全不同国家的前缀。

最后,您可以默认使用最常用的前缀格式。

没有任何其他信息,除非你想要默认不使用任何格式,否则你不能做得更好。

答案 2 :(得分:0)

我真的很困惑。你是什​​么意思,“提取和分离”?我的猜测是这些电话号码在MySQL数据库中,你可以使用PHP。您是否尝试从数字中获取前缀,然后将它们插入同一行中的其他字段?你是从数据库中提取这些数字,你只想将前缀打印到屏幕上吗?

无论你想做什么,并且理所当然地认为你正在使用PHP和正则表达式,这本质上不是你想要的吗?:

$telephone_number = '333-12345';
$matched = array();
preg_match('~^(\d+)-~', $telephone_number, $matched);
$matched[1]  // Should be '333'

答案 3 :(得分:0)

好的,我把它解决了。
我看到没有shor前缀与较长的一个共享字符 我的意思是:
02 - &gt;永远不会有更长的前缀为021,022等等

所以事情很简单:

  

我得到前4个数字 - &gt;是在我的前缀表中?
  是的:到此为止   NO:获得第3名

依旧......

感谢您的帮助