Я возился с некоторыми регулярными выражениями и натолкнулся на небольшую ошибку с более сложной версией форматирования моего телефонного номера.
Вот с чем я работаю:
$ number1 = '+1 (123) 1234567';
$ number1 = '+966 (1) 1234567 x555';
Эти строки на самом деле выводятся из запроса MySQL, который я создал, и мне это нравится.
Тем не менее, я делаю простую функцию php для автоматического форматирования номера абонента от 1234567 до 123-4567.
Меня не слишком беспокоит любое число, которое не начинается с +1. Поэтому я форматирую номера в США и Канаде.
Вот то, что я попытался, если было только 7 цифр, и если строка начинается с + 1
<?php
function format_phonenumbers($phone){
if(empty($phone)){ return ''; }
$exploded = explode(' ',$phone);
$countrycode = $exploded[0];
$areacode = $exploded[1];
$number = $exploded[2];
$ext = (!empty($exploded[3])?$exploded[3]:'');
if($countrycode=='+1'){
$strphone = strlen($number);
if ($strphone == 7) { // auto-format US PHones
$prefix = substr($number,0,3);
$suffix = substr($number,-4);
}
$phone = $countrycode.' '.$areacode.' '.$prefix.'-'.$suffix.' '.$ext;
}
return $phone;
}
echo format_phonenumbers('+1 (714) 1234567'); // US domestic
echo '<br>';
echo format_phonenumbers('+966 (1) 1234567 x555'); // international
?>
Это форматирует то, что мне нужно, но мне любопытно, если кто-нибудь поверит, что я могу сделать это лучше. Как при использовании средства проверки регулярных выражений, которое находит что-либо после круглых скобок, но перед расширением, вместо использования функции explode ().