从twilio收到的电话号码格式


Phone number format received from twilio

我将从twilio收到的短信存储在数据库中,以便以后使用。当我在沙箱里做这件事时,它起了作用。然而,当我升级到常规电话号码时,收到的号码与发送到的号码相同,但+1(或者对于xxxxxxxxxx,其中x是原始号码,它看起来更像1xxxxxxxxxx+)

因此,我将mysql_query更改为以下内容:但它仍然不起作用。如何识别这是原始电话号码?

<?php
    $starttime = time(); 
    $number = $_POST['number'];
    $number1 = "1" . $number;
    $number2 = $number . "1";
    $number3 = "+1" . $number;
    $number4 = $number . "+1";
    $number5 = "+" . $number . "1";
    $number6 = "1" . $number . "+";
    $number7 = $number."1+";
    $received = mysql_query("SELECT * FROM sms_received 
                WHERE (responder='$number' OR responder='$number1' 
                     OR responder='$number2' OR responder='$number3' 
                     OR responder='$number4' OR responder='$number5'
                     OR responder='$number6' OR responder='$number6')
                AND (body='y' OR body='yes' OR body='Y' OR body='Yes' OR 'yea' OR 'Yea')
                AND timestamp BETWEEN ".date('Y-m-d H:i:s', strtotime($starttime))." AND NOW()"); 
?>

但是,仍然没有收到任何消息。有什么想法吗?我还能如何检查是否收到用户的短信?我可以在数据库中看到它在那里。。。但mysql找不到它。它以前工作过,当发送的号码和收到的号码相同时,但加上+1后,它就把它搞砸了。(之前的代码只有WHERE responder = '$number',它起作用了,但额外的变量对它没有帮助)。这个代码有太多OR吗?这是个问题吗?

更新:

谢谢,这是我用来将数字缩减为xxxxxxxxxx格式的函数,然后再将其保存到数据库:

function checkPhone($responder){
    $items = Array('/' /', '/'+/', '/'-/', '/'./', '/',/', '/'(/', '/')/', '/[a-zA-Z]/');
    $clean = preg_replace($items, '', $responder);
    if (substr($clean, 0, 1) == "1") {
        return substr($clean, 1, 10); 
    }
    else {
        return substr($clean, 0, 10);   
    }
}
$number = checkPhone($responder);

Twilio以E.164格式返回数字,这是国际公认的电话号码格式标准。

通常,在将数字存储到数据库中之前,最好将其标准化为E164。这样,您就不必担心用同一编号的两个不同副本存储不同的数据,例如925-555-1234和(925)5551234。

谷歌有一个libphonenumber库,可以为您转换数字。它可以与Javascript、C++、Java和Python配合使用。

如果你使用的是PHP,并且只使用美国/加拿大号码,你可以编写一个函数来规范电话号码,它的作用如下:

- Strip out all non number characters from the phone number 
  (parentheses, dashes, spaces) - you can use a function like preg_replace
- if the phone number begins with a +1, do nothing
- if the phone number begins with a 1, add a +
- else, add a +1 to the beginning of the number.
- finally, store it in the database.

我希望这会有所帮助——如果你有更多问题,请告诉我。

Kevin

您的最后一个or是冗余的$number6,它应该是$number7

除此之外,您还可以做一些不同的事情,例如in:

responder in ('$number', '$number1', '$number2', '$number3', '$number4', '$number5', '$number6', '$number7')

或者类似的东西:

responder like '%$number%'

使用正则表达式。

preg_match_all("{[0-9]+}",$number,$m);
$norm_num="+".implode($m[0]);
if(strlen($norm_num)<6)
    exit('Too short!');
mysql_query("SELECT * FROM sms_received 
                    WHERE responder='%$norm_num%'
                    AND body IN ('y','yes','Y','Yes','yea','Yea')
                    AND timestamp BETWEEN ".date('Y-m-d H:i:s', strtotime($starttime))." AND NOW()");