Разделить данные без разделителя?

#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);