2011-04-29 5 views
1

Ok dire que j'ai mes numéros de téléphone stockés dans ma table:Diviser les données sans délimiteur?

« 0008675309 »

Je ne veux évidemment pas pour l'afficher comme ça, je voudrais formater quand je l'appelle comme:

(000)867-5309

Serait-il préférable de le stocker dans la base de données avec un delimiter tel que/- ou. Pour que je puisse le séparer plus tard? Ou est-il possible de le diviser par le nombre de caractères?

Répondre

2

Voici une seule ligne qui fait ce que vous voulez :

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

en prime, il ne sera pas changer le format si le format d'entrée ne correspond pas (numéros internationaux).

+1

Pro! Parfait, j'avais besoin de les séparer en variables aussi. Double whammy! Y a-t-il une bonne ressource que vous pourriez recommander pour en savoir plus sur ce que \ d et \ w signifie? Ou peut-être pour corriger la terminologie à rechercher? – aph107

+1

Je suppose que votre édition fait un triple coup de fouet. – aph107

+1

@luckycypher: http://php.net/manual/fr/regexp.reference.escape.php –

3

Le coût de performance et le code permettant de traiter un numéro de téléphone dans l'un de ces formats sont simples, c'est donc à votre goût. Pour répondre à votre question, il est très facile de saisir les trois premiers caractères, les trois suivants et les quatre derniers en utilisant, par exemple, la fonction substr.

+0

Fait sens. J'essaie de me concentrer sur l'apprentissage des meilleures pratiques, donc votre réponse était extrêmement pertinente, je suppose que cela n'a pas vraiment d'importance de quelle manière je le fais (dans ce cas au moins). Et merci, j'utiliserai la sous-chaîne. – aph107

2

Si vous ne stockez que des numéros de téléphone nord-américains (10 chiffres), alors, comme l'a noté @mellamokb, cela ne vous dérange pas. Si vous stockez des numéros internationaux, vous devez saisir autant de détails que possible (si possible) car il peut être difficile de savoir comment ponctuer le numéro plus tard.

+0

Aussi logique, je ne travaille pas avec les chiffres internationaux en ce moment, mais je garderai celui-ci à l'esprit pour quand je le fais, merci. – aph107

2

utilisation preg_split avec PREG_SPLIT_NO_EMPTY

1

Les autres réponses sont tout à fait correct. Si vous voulez que le code réel pour cela, je pense que ce qui suit devrait faire l'affaire (les indices peuvent être hors d'un oups!):

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

Questions connexes