我想将电话号码转换为特定格式,如果它不是那种格式

时间:2015-11-11 07:48:46

标签: php

我有一个电话号码,其类型为 varchar(32)。它可能 03004748495 3004748495 0300-4748495 300-4748495 + 92-300 -4748495 923004748495 。如果它不是这种格式,我希望它以这种格式 923004748495 转换为整数。我将如何实现这一目标?有什么想法吗?

2 个答案:

答案 0 :(得分:3)

我建议使用liphonenumber-for-php

来自github页面的示例代码:

$swissNumberStr = "044 668 18 00";

// First call the class
$phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance();
try {

    // turn it into a object using a given geo code
    $swissNumberProto = $phoneUtil->parse($swissNumberStr, "CH"); 

    // validate the phonenumber
    $isValid = $phoneUtil->isValidNumber($swissNumberProto);

    if($isValid){

        // Produces "+41446681800"
        echo $result_number = $phoneUtil->format($swissNumberProto, \libphonenumber\PhoneNumberFormat::E164);
         // Produces "044 668 18 00"
        echo $result_number = $phoneUtil->format($swissNumberProto, \libphonenumber\PhoneNumberFormat::NATIONAL);
        // Produces "+41 44 668 18 00"
        echo $result_number = $phoneUtil->format($swissNumberProto, \libphonenumber\PhoneNumberFormat::INTERNATIONAL);
    }

} catch (\libphonenumber\NumberParseException $e) {
    var_dump($e);
}

答案 1 :(得分:1)

使用preg_replace删除不需要的标记(http://php.net/manual/en/function.preg-replace.php)。

<?php

$number = '+92-300-4748495';

$number = preg_replace('/[^0-9]/', '', $number);

echo $number;

如果你想删除前导零,你可以使用rtrimhttp://php.net/manual/en/function.ltrim.php

<?php

$number = '0300-4748495';

$number = preg_replace('/[^0-9]/', '', $number);

$number = ltrim($number, '0');

echo $number;

附加请求&#34;如果在开始时未添加92,则还添加92.&#34;

<?php
$number = '123456';

if (substr($number, 0, 2) != '92') {
    $number = '92' . $number;
}

echo $number;