Я бы сделал это:
preg_replace('/(\d{3})([.-])?(\d{3})\2(\d{4})/', '$1-$3-$4', $phone_number);
\d
является сокращением для [0-9]
. Использование обратной ссылки означает, что вы можете ввести «123.456.7890» или «123.456.7890», но не «123.4567890» или «123.456-7890».
Также имейте в виду, что в других странах используются разные форматы телефонных номеров, если это имеет отношение к тому, что вы делаете.