PHP电话号码解析器

时间:2012-01-22 15:25:53

标签: php class

为英国和美国建立一个应用程序仅限爱尔兰,但可能延伸到其他国家。我们已经构建了一个API,我正在尝试决定A)如何存储电话号码B)如何编写解析器来理解所有格式的入口和比较。

e.g。

假设用户在爱尔兰,他们会添加这些格式的电话号码

  

0871231234

     

087 123 1234

     

087-1231234

     

353871231234

或者以有效方式编写数字的任何其他组合。我们希望允许这样做,以便以一致的方式将新数字添加到我们的数据库

因此,上述所有数字都可能存储为00353871231234

问题是我还需要为所有英国人解析。那里有没有可以帮助这个过程的课程?

4 个答案:

答案 0 :(得分:4)

使用正则表达式。可以找到信息页面here。它不应该太难学,对你非常有用。

以下是在英国验证电话号码的常规表达方式:

^((\(?0\d{4}\)?\s?\d{3}\s?\d{3})|(\(?0\d{3}\)?\s?\d{3}\s?\d{4})|(\(?0\d{2}\)?\s?\d{4}\s?\d{4}))(\s?\#(\d{4}|\d{3}))?$

它允许3,4或5位区域前缀,分别带有8,7或6位数的电话号码,以及带有#符号前缀的可选3或4位分机号码。还允许围绕区域前缀的可选括号和适当的数字组之间的可选空格。可以找到更多here

This Stackoverflow链接可以帮助您了解正则表达式如何与国际电话号码一起使用。

答案 1 :(得分:2)

?php
$array = array
(
        '0871231234',
        '087 123 1234',
        '087-1231234',
        '+353871231234'
);

foreach($array as $a)
        if(preg_match("/(^[0-9]{10}$)|(^[0-9]{3}\ [0-9]{3}\ [0-9]{4}$)|(^[0-9]{3}\-[0-9]{7}$)|(^\+353[0-9]{9}$)/", $a))
        {
                // removes +35
                $a = preg_replace("/^\+[0-9]{2}/", '', $a);
                // removes first number
                $a = preg_replace("/^[0-9]{1}/", '', $a);
                // removes spaces and -
                $a = preg_replace("/(\s+)|(\-)/", '', $a);
                $a = "00353".$a;
                echo $a."\n";
        }
?>

答案 2 :(得分:0)

答案 3 :(得分:-2)

设计英国的基本功能,如果需要,请稍后再添加。如果需要,您可以在以后分离每个国家/地区的逻辑。我倾向于谨慎乐观,你想接受尽可能多的数字?

  1. 剥去空格,打开和关闭括号 -
  2. 如果数字以单个0开头,则替换为00
  3. 如果数字以+替换为00
  4. 开头
  5. 如果它是数字并且总长度在9到11个字符之间,那么我们就是'好'
  6. 至于存储,您可以将其存储为字符串...或整数,第二个字段包含前缀数量为0的

    使用此作为参考 http://en.wikipedia.org/wiki/Telephone_numbers_in_the_United_Kingdom