#php #sql #syntax #split
#php #sql #синтаксис #разделение
Вопрос:
Хорошо, допустим, у меня есть номера телефонов, сохраненные в моей таблице как:
«0008675309»
Я, очевидно, не хотел бы отображать это просто так, я бы хотел отформатировать его, когда я вызываю его как:
(000)867-5309
Было бы лучше сохранить это в базе данных с разделителем, таким как / — или . Чтобы я мог разделить их позже? Или можно разделить их по количеству символов?
Ответ №1:
Стоимость производительности и код для обработки телефонного номера в любом из этих форматов просты, так что это действительно зависит от ваших предпочтений. Чтобы ответить на ваш вопрос, очень легко захватить первые три символа, следующие три и последние четыре, используя, например, substr
функцию.
Комментарии:
1. Имеет смысл. Я пытаюсь сосредоточиться на изучении лучших практик, поэтому ваш ответ был чрезвычайно актуальным, я думаю, на самом деле не имеет значения, каким способом я это делаю (по крайней мере, в данном случае). И спасибо, я буду использовать substring .
Ответ №2:
Вот одна строка, которая делает то, что вы хотите:
$phone = preg_replace('^(d{3})(d{3})(d{4})$', '($1)$2-$3', $phone);
В качестве дополнительного бонуса он не изменит формат, если формат ввода не совпадает (международные номера).
Комментарии:
1. Pro! Идеально, мне нужно было, чтобы они тоже были разделены на переменные. Двойной удар! Есть ли хороший ресурс, который вы могли бы порекомендовать, чтобы узнать больше о том, что означают d и w? Или, возможно, исправить терминологию для поиска?
Ответ №3:
Если вы сохраняете только североамериканские телефонные номера (10 цифр), то, как отметил @mellamokb, в любом случае все в порядке. Если вы, возможно, храните международные номера, вам следует записать как можно больше деталей на ранней стадии (если это возможно), поскольку позже может быть трудно понять, как расставлять знаки препинания в номере.
Комментарии:
1. Также имеет смысл, я сейчас не работаю с международными номерами, но я буду иметь это в виду, когда буду это делать, спасибо.
Ответ №4:
используйте preg_split с PREG_SPLIT_NO_EMPTY
Ответ №5:
Остальные ответы совершенно правильные. В случае, если вам нужен фактический код для этого, я думаю, что следующее должно сработать (индексы могут быть отключены на одно упс!):
$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);