gpt4 book ai didi

php - 根据 E 164 格式格式化电话号码

转载 作者:行者123 更新时间:2023-12-04 21:09:22 25 4
gpt4 key购买 nike

我是 php 的新手。我想编写一个脚本来检查电话号码,如果它们是用于国际的,如果它们是国际电话号码,我需要根据 E164 格式对它们进行格式化。我制作了一个用于验证电话号码的正则表达式,但我坚持格式化电话号码。代码如下:

 <?php
$replacement = '/^\s?+(93|355|213|684|376|244|809|268|54|374|297|247|61|672|43|994|242|246|973|880|375|32|501|229|809|975|284|591|387|267|55|284|673|359|226|257|855|237|1|238|1|345|238|236|235|56|86|886|57|269|242|682|506|385|53|357|420|45|246|767|809|253|593|20|503|240|291|372|251|500|298|679|358|33|596|594|241|220|995|49|233|350|30|299|473|671|502|224|245|502|509|504|852|36|354|91|62|98|964|353|972|39|225|876|81|962|7|254|855|686|82|850|965|996|371|856|961|266|231|370|218|423|353|853|389|261|265|60|960|223|356|692|596|222|230|269|52|691|373|33|976|473|212|258|95|264|674|977|31|599|869|687|64|505|227|234|683|850|1670|47|968|92|680|507|675|595|51|63|48|351|1787|974|262|40|7|250|670|378|239|966|221|381|248|232|65|421|386|677|252|27|34|94|290|869|508|249|597|268|46|41|963|689|886|7|255|66|228|690|676|1868|90|993|688|256|380|971|44|598|1|7|678|39|58|84|1340|681|685|381|967|381|243|260|263)?\s?[.]?[-]?[(]?\d{3}[)]?\s?[.]?[-]?\d{3}\s?[.]?[-]?\d+/'; $phonenumber = '+1 (123) 456-7890';

if(preg_match($replacement, $phonenumber, $matches))

{

echo "matched";

} else print_r($matches);

?>

最佳答案

E164 是一项复杂的任务,因为它是一个移动目标。话虽如此,谷歌在他们的 libphonenumber 上做得非常出色。 .但是,它不适用于 PHP。然而,Joshua Gigg 非常友好地用他的 libphonenumber-for-php 将它移植到 PHP 中。这就是我使用的。他保持更新并与谷歌版本同步。有一个在线演示可用 https://giggsey.com/libphonenumber

具体回答你的问题:
使用 composer 安装 composer require giggsey/libphonenumber-for-php .

假设您有一个代表瑞士电话号码的字符串。这是将其解析/规范化为 PhoneNumber 对象的方式:

$swissNumberStr = "044 668 18 00";
$phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance();
try {
$swissNumberProto = $phoneUtil->parse($swissNumberStr, "CH");
var_dump($swissNumberProto);
} catch (\libphonenumber\NumberParseException $e) {
var_dump($e);
}

此时,swissNumberProto 包含:
class libphonenumber\PhoneNumber#9 (7) {
private $countryCode =>
int(41)
private $nationalNumber =>
double(446681800)
private $extension =>
NULL
private $italianLeadingZero =>
NULL
private $rawInput =>
NULL
private $countryCodeSource =>
NULL
private $preferredDomesticCarrierCode =>
NULL
}

现在让我们验证数字是否有效:
$isValid = $phoneUtil->isValidNumber($swissNumberProto);
var_dump($isValid); // true

此示例使用区域代码 (CH) 来格式化数字。但是,如果号码以国际格式(例如 +44 117 496 0123)传递,则这不是必需的。

这个实用程序有很多很多选项,我鼓励您深入研究文档。在快速回答中可以做的事情真的只有这么多。我真的希望这能帮助你和任何遇到这个问题的人。

关于php - 根据 E 164 格式格式化电话号码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41774883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com