2013-02-01 46 views
0

我試圖讓電話號碼插入數據庫的方式都遵循相同的約定,不管它們是如何插入的。PHP去掉不整數並將輸出重新格式化爲電話號碼

所以(123) 456.7890123.456.7890

將兩者最終會到數據庫中123-456-7890

即時通訊思想,必須有一個功能,讓我脫光衣服所有的非整數字符,從而123.456.7890可以變成1234567890,然後將其重新格式化爲xxx-xxx-xxxx

也許我錯了這個,但即時思考的PHP必須有一種方式來完成沿這些行的東西,所以任何幫助將大大升值特德。

回答

1
// Remove any non-number character 
$str = preg_replace('/[^\d]/', '', $str); 
// Insert dashes 
$str = preg_replace('/(\d)(?=(\d{4}|\d{7})$)/', '$1-', $str); 

這裏的小提琴:http://codepad.viper-7.com/pQlwVw

1

只是一個簡單的正則表達式將做到這一點:

$nums = preg_replace("/\D/","",$input); 

理想情況下,你應該將其另存爲,只有在輸出中,這將完成格式化像這樣:

$output = preg_replace("/(...)(...)(....)/","$1-$2-$3",$nums); 
1

下面是7或10位數字,正則表達式,以允許擴展,分隔符是空格,破折號或句:

^(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$ 

或者你可以使用大錘的方法:只帶將任何非數字和格式化爲您的內容。