Основной номер и добавочный я бы раздел на 2 разных поля - это самый лучший вариант. И естественно хранил бы их отдельно в базе.
Сначала отформатировал бы номер телефона, а после уже добавил свой добавочный если он есть
Оставить в номере телефона только цифры, и отформатировать в красивый вид (функция сама простая, для примера)
echo format_phone('7wer9e85w11-1"!1н1*11'); // вернет: +7 (985) 111-11-11
function format_phone($phone = '')
{
$phone = preg_replace('/[^0-9]/', '', $phone); // вернет 79851111111
if (strlen($phone) != 11 and ($phone[0] != '7' or $phone[0] != '8')) {
return FALSE;
}
$phone_number['dialcode'] = substr($phone, 0, 1);
$phone_number['code'] = substr($phone, 1, 3);
$phone_number['phone'] = substr($phone, -7);
$phone_number['phone_arr'][] = substr($phone_number['phone'], 0, 3);
$phone_number['phone_arr'][] = substr($phone_number['phone'], 3, 2);
$phone_number['phone_arr'][] = substr($phone_number['phone'], 5, 2);
$format_phone = '+' . $phone_number['dialcode'] . ' ('. $phone_number['code'] .') ' . implode('-', $phone_number['phone_arr']);
return $format_phone;
}