剥离电话号码(手机)
Stripping down Phonenumber (mobile)
是否有将 phone 数字简化为特定格式的函数或简单方法?
输入可以是数字(手机,不同国家代码)
也许
+4917112345678
+49171/12345678
0049171 12345678
或者可能来自其他国家
004312345678
+44...
我在做
$mobile_new = preg_replace("/[^0-9]/","",$mobile);
杀死数字以外的所有内容,因为我需要 49171 格式(开头没有 + 或 00),但我需要处理是否先插入 00 或者有人使用 +49(0 )171 or or 输入一个 0171 (需要是 49171.
所以第一个数字总是需要是没有 +/00 且之间没有任何 (0) 的乡村。
有人可以就如何解决这个问题给我建议吗?
此模式 (49)\(?([0-9]{3})[\)\s\/]?([0-9]{8})
会将号码分成三组:
- 49 - 国家代码
- 3 位数字 - 区号
- 8 位数字 - 数字
比赛结束后,您可以通过
.
连接它们来构造干净的数字
演示:https://regex101.com/r/tE5iY3/1
如果这不适合您,请更准确地解释您想要的测试输入和预期输出。
您可以使用
(?:^(?: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
我建议查看 Google 的 LibPhoneNumber 及其 PHP 的端口。
它支持多种格式和国家,并且维护良好。最好不要自己弄清楚。
https://github.com/giggsey/libphonenumber-for-php
$phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance();
$usNumberProto = $phoneUtil->parse("+1 650 253 0000", "US");
是否有将 phone 数字简化为特定格式的函数或简单方法?
输入可以是数字(手机,不同国家代码)
也许
+4917112345678
+49171/12345678
0049171 12345678
或者可能来自其他国家
004312345678
+44...
我在做
$mobile_new = preg_replace("/[^0-9]/","",$mobile);
杀死数字以外的所有内容,因为我需要 49171 格式(开头没有 + 或 00),但我需要处理是否先插入 00 或者有人使用 +49(0 )171 or or 输入一个 0171 (需要是 49171.
所以第一个数字总是需要是没有 +/00 且之间没有任何 (0) 的乡村。
有人可以就如何解决这个问题给我建议吗?
此模式 (49)\(?([0-9]{3})[\)\s\/]?([0-9]{8})
会将号码分成三组:
- 49 - 国家代码
- 3 位数字 - 区号
- 8 位数字 - 数字
比赛结束后,您可以通过 .
演示:https://regex101.com/r/tE5iY3/1
如果这不适合您,请更准确地解释您想要的测试输入和预期输出。
您可以使用
(?:^(?: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
我建议查看 Google 的 LibPhoneNumber 及其 PHP 的端口。 它支持多种格式和国家,并且维护良好。最好不要自己弄清楚。
https://github.com/giggsey/libphonenumber-for-php
$phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance();
$usNumberProto = $phoneUtil->parse("+1 650 253 0000", "US");