2015-02-06 124 views
0

是否有功能或简单的方法将电话号码剥离为特定格式?剥离电话号码(移动)

输入可以是数字(移动,不同的国家代码)

也许

+4917112345678 
+49171/12345678 
0049171 12345678 

或也许来自另一个国家

004312345678 
+44... 

Im做一个

$mobile_new = preg_replace("/[^0-9]/","",$mobile); 

至 因为我需要的格式是49171(开始时不带+或00),但是如果先插入00或者有人使用+49(0)171或者输入a 0171(需要是49171.

所以第一个数字总是需要农村没有+/00和之间没有任何(0)之间。

有人可以给我一个关于如何解决这个问题的建议吗?

+0

如果用户输入'0171'.....或其他任何不开始与'+'或'00'你只能猜测countryspecific前缀是什么。或者你想让'49'成为这种情况下的默认值? – 2015-02-06 10:21:32

+0

那就对了。我想为CC添加一个下拉列表,我认为。 – Sili 2015-02-06 19:53:42

回答

0

您可以使用

(?:^(?:00|\+|\+\d{2}))|\/|\s|\(\d\) 

匹配大部分的情况下,只需用什么替代它们。例如:

$mobile = "+4917112345678"; 
$mobile_new = preg_replace("/(?:^(?:00|\+|\+\d{2}))|\/|\s|\(\d\)/","",$mobile); 
echo $mobile_new; 
//output: 4917112345678 

regex101 Demo

说明:

我正在使用的OR这里,匹配您的每一个案例一个接一个:

  1. (?:^(?:00|\+|\+\d{2}))比赛00++,然后在字符串的开头加上两个数字
  2. \/匹配的/字符串
  3. \s在任何地方whitspace在字符串中的任何地方匹配(它在regex101演示换行符比赛,但我想你匹配自己的每个号码)
  4. \(\d\)一个号码匹配括在方括号中的字符串

不受本正则表达式的唯一情况是任何地方输入格式01712345678,因为你只能采取猜测该国特定的前缀可以是什么。如果你希望它是49默认情况下,则只需更换每个输入始发于一个049

$mobile = "01712345678"; 
$mobile_new = preg_replace("/^0/","49",$mobile); 
echo $mobile_new; 
//output: 491712345678 
+0

工作正常!而你的权利..脚本需要cc才能正常工作,所以如果有人忘记cc,不需要采取任何行动:) – Sili 2015-02-06 19:55:33

0

这种模式(49)\(?([0-9]{3})[\)\s\/]?([0-9]{8})将在三组分成数:

  • 49 - 国家代码
  • 3位 - 区号
  • 8位 - 数

比赛结束后,你可以建造干净的数字只是连接他们\1\2\3

演示:https://regex101.com/r/tE5iY3/1

如果这不适合你,那么请解释更准确地说,你想测试输入和预期的输出是什么。

0

我建议考虑看看LibPhoneNumber由谷歌和它的PHP接口。 它支持多种格式和国家,并且维护良好。最好不要自己弄清楚。

https://github.com/giggsey/libphonenumber-for-php

$phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance(); 
$usNumberProto = $phoneUtil->parse("+1 650 253 0000", "US"); 
+0

看起来不错!我会在稍后的更新中实现它!谢谢! – Sili 2015-02-06 19:56:16