我是php的新手。我想编写一个检查电话号码的脚本,如果这些电话号码是国际电话号码,如果它们是国际电话号码,则需要根据E164格式对其进行格式化。我做了一个用于验证电话号码的正则表达式,但是我仍然坚持格式化电话号码。代码如下:
Dom.. 5
E164是一项复杂的任务,因为它是一个不断发展的目标。话虽这么说,谷歌的libphonenumber表现出色。但是,它不适用于PHP。但是Joshua Gigg非常乐于使用他的libphonenumber-for-php将其移植到PHP,这就是我所使用的。他正在保持更新并与Google版本保持同步。有一个在线演示可用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)传递数字,则不必这样做。
该实用程序还有很多其他选择,我鼓励您深入阅读文档。快速答案实际上只能做很多事情。我真的希望对您和其他任何人有帮助。
E164是一项复杂的任务,因为它是一个不断发展的目标。话虽这么说,谷歌的libphonenumber表现出色。但是,它不适用于PHP。但是Joshua Gigg非常乐于使用他的libphonenumber-for-php将其移植到PHP,这就是我所使用的。他正在保持更新并与Google版本保持同步。有一个在线演示可用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)传递数字,则不必这样做。
该实用程序还有很多其他选择,我鼓励您深入阅读文档。快速答案实际上只能做很多事情。我真的希望对您和其他任何人有帮助。