是否有功能或简单方法将电话号码删除为特定格式?
输入可以是数字(移动,不同的国家/地区代码)
也许
+4917112345678
+49171/12345678
0049171 12345678
或者来自其他国家/地区
004312345678
+44...
我正在做一个
$mobile_new = preg_replace("/[^0-9]/","",$mobile);
杀死除了数字以外的所有内容,因为我需要格式为49171(开头没有+或00),但我需要处理如果首先插入00或者某人使用+49(0)171或者输入0171(需要49171。
所以第一个数字总是需要在没有+ / 00且没有任何(0)之间的乡村。
有人可以就如何解决这个问题给我一些建议吗?
答案 0 :(得分:0)
此模式(49)\(?([0-9]{3})[\)\s\/]?([0-9]{8})
将分为三组:
匹配后,您可以构建干净的数字,只需按\1\2\3
连接它们。
演示:https://regex101.com/r/tE5iY3/1
如果这不适合您,请通过测试输入和预期输出更准确地解释您的需求。
答案 1 :(得分:0)
您可以使用
(?:^(?:00|\+|\+\d{2}))|\/|\s|\(\d\)
匹配大多数情况,只需将其替换为空。例如:
$mobile = "+4917112345678";
$mobile_new = preg_replace("/(?:^(?:00|\+|\+\d{2}))|\/|\s|\(\d\)/","",$mobile);
echo $mobile_new;
//output: 4917112345678
说明:
我在这里使用OR
,逐个匹配您的每个案例:
(?:^(?:00|\+|\+\d{2}))
匹配00
,+
或+
,后跟字符串开头的两个数字\/
匹配字符串/
\s
匹配字符串中任意位置的空格(它与regex101演示中的换行符匹配,但我认为您自己匹配每个号码)\(\d\)
匹配字符串此正则表达式未涵盖的唯一情况是输入格式01712345678
,因为您只能猜测国家/地区特定的前缀是什么。如果您希望默认情况下为49
,则只需使用0
替换单个49
开头的每个输入:
$mobile = "01712345678";
$mobile_new = preg_replace("/^0/","49",$mobile);
echo $mobile_new;
//output: 491712345678
答案 2 :(得分:0)
我建议您查看Google的LibPhoneNumber及其PHP端口。 它支持多种格式和国家,并且维护良好。最好不要自己解决这个问题。
https://github.com/giggsey/libphonenumber-for-php
$phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance();
$usNumberProto = $phoneUtil->parse("+1 650 253 0000", "US");