laphiloctete
laphiloctete

Reputation: 476

Split data without delimiter?

Ok say I have my phone numbers stored in my table as:

"0008675309"

I obviously wouldn't want to display it just like that, I'd want to format it when I call it as:

(000)867-5309

Would it be better to store it in the database with a delimiter such as / - or . So that I can split it later? Or is it possible to split it by the number of characters?

Upvotes: 1

Views: 288

Answers (5)

Alix Axel
Alix Axel

Reputation: 154513

Here is a one liner that does what you want:

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

As a added bonus it won't change the format if the input format doesn't match (international numbers).

Upvotes: 2

Marshall Moutenot
Marshall Moutenot

Reputation: 121

The other answers are perfectly correct. In case you wanted the actual code for it, I think the following should do the trick (the indexes may be off by one oops!):

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

Upvotes: 1

dynamic
dynamic

Reputation: 48091

use preg_split with PREG_SPLIT_NO_EMPTY

Upvotes: 2

Scott C Wilson
Scott C Wilson

Reputation: 20016

If you are only storing North American phone numbers (10 digits), then as @mellamokb noted, you're ok either way. If you may be storing international numbers, you should capture as much detail as you can early on (if possible) since it might be hard to know how to punctuate the number later on.

Upvotes: 2

mellamokb
mellamokb

Reputation: 56769

The performance cost and code to process a phone number in any of those formats is simple, so it's really up to your preference. To answer your question, it is very easy to grab the first three characters, the next three, and the last four using for example, substr function.

Upvotes: 3

Related Questions