Формат номера телефона, полученный от twilio - PullRequest
6 голосов
/ 09 января 2012

Я храню смс, полученные от 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', и оно работало, но дополнительные переменные не помогли). В этом коде слишком много ИЛИ? Это даже проблема?

UPDATE:

Спасибо, вот функция, которую я использую, чтобы сократить число до формата 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);

Ответы [ 3 ]

6 голосов
/ 10 января 2012

Twilio возвращает номера в формате, называемом E.164 , который является международно признанным стандартом форматирования телефонных номеров.

Как правило, рекомендуется стандартизировать номер E164 ПЕРЕД сохранением его в базе данных. Таким образом, вам не нужно беспокоиться о хранении разных данных с двумя разными копиями с одинаковым номером - например, 925-555-1234 и (925) 5551234.

Google имеет библиотеку 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.

Надеюсь, это поможет - пожалуйста, дайте мне знать, если у вас есть еще вопросы.

Кевин

0 голосов
/ 10 января 2012

Используйте регулярное выражение.

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()");
0 голосов
/ 09 января 2012

Ваш последний or избыточен $number6, он должен быть $number7.

Кроме этого, вы можете делать несколько разных вещей, например in:

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

Или как то так:

responder like '%$number%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...