Разделить данные без разделителя? - PullRequest
1 голос
/ 29 апреля 2011

Хорошо, скажите, что мои номера телефонов хранятся в моей таблице как:

"0008675309"

Я, очевидно, не хотел бы отображать это просто так, я бы хотел отформатировать его, когда я назову это:

(000) 867-5309

Было бы лучше сохранить его в базе данных с таким разделителем, как / - или. Так что я могу разделить это позже? Или есть возможность разбить его по количеству символов?

Ответы [ 5 ]

3 голосов
/ 29 апреля 2011

Производительность и код для обработки телефонного номера в любом из этих форматов просты, так что это действительно ваше предпочтение.Чтобы ответить на ваш вопрос, очень легко получить первые три символа, следующие три и последние четыре, используя, например, функцию substr.

2 голосов
/ 29 апреля 2011

Вот один вкладыш, который делает то, что вы хотите:

$phone = preg_replace('^(\d{3})(\d{3})(\d{4})$', '($1)$2-$3', $phone);

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

2 голосов
/ 29 апреля 2011

использовать preg_split с PREG_SPLIT_NO_EMPTY

2 голосов
/ 29 апреля 2011

Если вы храните только североамериканские телефонные номера (10 цифр), то, как заметил @mellamokb, вы в любом случае в порядке.Если вы, возможно, храните международные номера, вы должны собрать как можно больше подробностей на раннем этапе (если это возможно), поскольку в дальнейшем может быть трудно понять, как сделать акцент на номере.

1 голос
/ 29 апреля 2011

Остальные ответы совершенно верны.Если вам нужен реальный код для этого, я думаю, что следующее должно сработать (индексы могут быть отключены одним опа!):

$phone_number="0008675309"
$phone_number=substr_replace($phone_number, "(", 0, 0);
$phone_number=substr_replace($phone_number, ")", 4, 0);
$phone_number=substr_replace($phone_number, "-", 8, 0);

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