2010-10-21 72 views
0

我有一個用戶表單,我在其中一個字段中輸入電話號碼作爲輸入。我有兩個單獨的RegEx語句檢查輸入。preg_replace在我的PHP腳本不起作用

第一個是:

preg_match('/^([\(]{1}[0-9]{3}[\)]{1}[\.| |\-]{0,1}|^[0-9]{3}[\.|\-| ]?)?[0-9]{3}(\.|\-|)?[0-9]{4}$/', $phone);

和它的偉大工程。它可以識別多種不同的格式,即222-333-4444或者2224445555.

在另一方面,當我嘗試:

preg_replace('/\+?1?[-\s.]?\(?(\d{3})\)?[-\s.]?(\d{3})[-\s.]?(\d{4})/g', '($1) $2-$3', $phone);

這是應該進入的字符串格式化爲(222)3334444格式,$ preg_replace()調用後$ phone保持不變。

任何幫助將不勝感激!

+1

我不確定您希望以這種方式替換文本中的$值。你有4個捕獲組,你引用3個。不應該最後一個是4美元? – kapa 2010-10-21 06:38:57

+0

@bazmegakapa當我將preg_replace中顯示的這種模式插入http://gskinner.com/RegExr/時,它完美地工作。我的問題在PHP腳本中。我必須在那裏做錯事。 – incognito 2010-10-21 15:10:32

回答

7

只是爲了確保:你需要捕捉的返回值,preg_replace不直接修改參數:

$phone = preg_replace(..., $phone); 
+2

啊php的不一致... – SeanJA 2010-10-21 06:06:46

+0

當我嘗試這種方法 $ phone = preg_replace(pattern,replace,$ phone)它返回NULL根據PHP手冊:「preg_replace()返回一個數組,如果主題參數是一個數組或一個字符串 如果找到匹配項,則返回新的主題,否則如果發生錯誤,則主題將不變或返回NULL。 所以很明顯,它在腳本中寫入的方式有問題,但是什麼? – incognito 2010-10-21 15:19:40

0

簡化以上,並想出了以下內容:

preg_replace('/\b(\d{3})\D?(\d{3})\D?(\d{4})\b/' , '($1) $2-$3' , $inString); 

測試結果:

preg_replace('/\b(\d{3})\D?(\d{3})\D?(\d{4})\b/' , '($1) $2-$3' , '222-333-4444'); 
# Returns '(222) 333-4444' 

preg_replace('/\b(\d{3})\D?(\d{3})\D?(\d{4})\b/' , '($1) $2-$3' , '2223334444'); 
# Returns '(222) 333-4444' 
+0

我會給這些鏡頭看看會發生什麼。謝謝! – incognito 2010-10-21 15:20:37

0

這是造成模式錯誤的/ g。一旦我刪除它的工作。感謝大家的努力!