为英国和美国建立一个应用程序仅限爱尔兰,但可能延伸到其他国家。我们已经构建了一个API,我正在尝试决定A)如何存储电话号码B)如何编写解析器来理解所有格式的入口和比较。
e.g。
假设用户在爱尔兰,他们会添加这些格式的电话号码
0871231234
087 123 1234
087-1231234
353871231234
或者以有效方式编写数字的任何其他组合。我们希望允许这样做,以便以一致的方式将新数字添加到我们的数据库
因此,上述所有数字都可能存储为00353871231234
问题是我还需要为所有英国人解析。那里有没有可以帮助这个过程的课程?
答案 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)
设计英国的基本功能,如果需要,请稍后再添加。如果需要,您可以在以后分离每个国家/地区的逻辑。我倾向于谨慎乐观,你想接受尽可能多的数字?
至于存储,您可以将其存储为字符串...或整数,第二个字段包含前缀数量为0的
使用此作为参考 http://en.wikipedia.org/wiki/Telephone_numbers_in_the_United_Kingdom