我的新手機無法識別電話號碼,除非其區號與來電相匹配。由於我住在愛達荷州,那裏的州內電話不需要區號,我的很多聯繫人都沒有區號保存。由於我的手機中儲存了數千個聯繫人,因此手動更新它們並不實際。我決定寫下面的PHP腳本來處理這個問題。它似乎工作得很好,除了我在隨機聯繫人的開頭找到重複的區號。使用正則表達式將PHP中的電話號碼修復爲PHP
<?php
//the script can take a while to complete
set_time_limit(200);
function validate_area_code($number) {
//digits are taken one by one out of $number, and insert in to $numString
$numString = "";
for ($i = 0; $i < strlen($number); $i++) {
$curr = substr($number,$i,1);
//only copy from $number to $numString when the character is numeric
if (is_numeric($curr)) {
$numString = $numString . $curr;
}
}
//add area code "208" to the beginning of any phone number of length 7
if (strlen($numString) == 7) {
return "208" . $numString;
//remove country code (none of the contacts are outside the U.S.)
} else if (strlen($numString) == 11) {
return preg_replace("/^1/","",$numString);
} else {
return $numString;
}
}
//matches any phone number in the csv
$pattern = "/((1? ?\(?[2-9]\d\d\)? *)? ?\d\d\d-?\d\d\d\d)/";
$csv = file_get_contents("contacts2.CSV");
preg_match_all($pattern,$csv,$matches);
foreach ($matches[0] as $key1 => $value) {
/*create a pattern that matches the specific phone number by adding slashes before possible special characters*/
$pattern = preg_replace("/\(|\)|\-/","\\\\$0",$value);
//create the replacement phone number
$replacement = validate_area_code($value);
//add delimeters
$pattern = "/" . $pattern . "/";
$csv = preg_replace($pattern,$replacement,$csv);
}
echo $csv;
?>
是否有更好的方法來修改CSV?另外,有沒有一種方法可以最大限度地減少通過CSV的次數?在上面的腳本中,preg_replace在非常大的String上被調用了數千次。
感謝您的建議克里斯。我可以這樣做;但是我做了一個點使用的編程經常盡我所能來解決現實世界的問題。雖然我在解決問題的部分感興趣,我更感興趣的是與代碼這樣做,假設它可以幫助我學習。 – objectivesea 2010-04-02 01:33:40
我完全理解 - 這將是一個很好的鍛鍊; Tibial。作爲PHP,如果你想出一個通用工具,你可以製作一個「修復我的電話簿」的網絡應用程序。這將是非常好的。 – 2010-04-02 01:43:57