Форматировать телефонный код города с помощью PHP

На нашем веб-сайте есть много адресов офисов, каждый из которых имеет основной номер телефона — многие из них были введены с кодом города, который выглядит следующим образом: (800) 555-5555.

Вот как мне нужно, чтобы они все выглядели, независимо от того, как это было введено: 800- 555-5555

Вот где я сейчас

str_replace(array( '(', ')' ), '', $this->data['location_phone']);

Хотя это удаляет обе скобки, мне просто нужно удалить открывающую и заменить закрывающую скобку тире.


person Ryan Brackett    schedule 25.06.2014    source источник


Ответы (4)


Используйте массив для ваших замен.

str_replace(array( '(', ')' ), array('', '-'), $this->data['location_phone']);

Вы можете прочитать больше на странице документации str_replace.

person Navelpluisje    schedule 25.06.2014

Вы можете сделать что-то похожее на то, что вы уже делаете... вместо того, чтобы заменять ( и ) на '', вы можете просто заменить (, а затем отдельно заменить ) на -.

str_replace(array('('), '', $this->data['location_phone']);

str_replace(array(')'), '-', $this->data['location_phone']);

Или, что еще лучше, объединить в одну строку (как указано в других ответах):

str_replace(array( '(', ')' ), array('', '-'), $this->data['location_phone']);
person dub stylee    schedule 25.06.2014
comment
Эй, мужик, спасибо! Это сработало отлично. Мой синтаксис был далеко. Спасибо!! - person Ryan Brackett; 25.06.2014

Этот ответ, похоже, решает проблему с preg_match и реконструкция данных. Но регулярное выражение, опубликованное в этом ответе, не очень подходит для описанной здесь очистки данных.

Итак, попробуйте этот вариант ответа, который я собрал, в котором используется отличное регулярное выражение из сообщения в официальная документация по PHP:

// Set test data.
$test_data = array();
$test_data[] = '1 800 555-5555';
$test_data[] = '1-800-555-5555';
$test_data[] = '800-555-5555';
$test_data[] = '(800) 555-5555';

// Set the regex.
$regex = '/^(?:1(?:[. -])?)?(?:\((?=\d{3}\)))?([2-9]\d{2})(?:(?<=\(\d{3})\))? ?(?:(?<=\d{3})[.-])?([2-9]\d{2})[. -]?(\d{4})(?: (?i:ext)\.? ?(\d{1,5}))?$/';

// Roll through the test data & process.
foreach ($test_data as $data) {
  if (preg_match($regex, $data, $matches)) {

    // Reconstruct the number based on the captured data.
    echo "New number is: " . $matches[1] . '-' . $matches[2] . '-' . $matches[3] . '<br />';

    // Dump the matches to check what is being captured.
    echo '<pre>';
    print_r($matches);
    echo '</pre>';

  }
}

И очищенные результаты, включая preg_match совпадений, будут такими:

New number is: 800-555-5555
Array
(
    [0] => 1 800 555-5555
    [1] => 800
    [2] => 555
    [3] => 5555
)
New number is: 800-555-5555
Array
(
    [0] => 1-800-555-5555
    [1] => 800
    [2] => 555
    [3] => 5555
)
New number is: 800-555-5555
Array
(
    [0] => 800-555-5555
    [1] => 800
    [2] => 555
    [3] => 5555
)
New number is: 800-555-5555
Array
(
    [0] => (800) 555-5555
    [1] => 800
    [2] => 555
    [3] => 5555
)
person Giacomo1968    schedule 25.06.2014

Спасибо. Я использовал это для номера телефона, чтобы убрать все пробелы и ( ) и - так что тел: // 1234567890

href=tel://". str_replace(array('(', ')',' ','-' ), array('', '','',''), $row["ContactPhone"] ).">". $row["Контактный телефон"]."

person Win Rinkle    schedule 03.05.2017