2016-12-25 26 views
0

我在JavaScript中有以下功能,它需要在美國的電話號碼的文本,測試它,以確保沒有無效輸入,然後格式化它顯示在相同的文本框。JavaScript的正則表達式來格式化電話與任何字符擴展

它運行良好,但它也需要接受電話分機。電話分機基本上需要按原樣通過,因此它可以是任意數量的任何字符,無論它是以空格,a *,ext開頭。我被要求不要擔心所有這些情況,正如我所說的那樣,讓擴展程序剛剛通過。我告訴我的老闆,我們可以爲擴展名添加另一個文本框,但這不是他想要的。

因此,編寫n個任意字符的正則表達式並不困難,我更關心的部分是如何在實際執行電話號碼格式的代碼中獲取這些字符。

我想我可以在有效的電話號碼後面抓住字符,但我老實說不知道如何做到這一點,請記住,電話號碼是正確的檢查,輸入可能有不同的長度。有什麼想法嗎?

我將不勝感激任何幫助!下面是當前的代碼,這需要調整接受和返回時,它格式化電話號碼的分機,牢記擴展可以是任意數量的任意字符的要求:

function formatPhone(phoneObj) { 
var phoneStr = phoneObj.value, 
    s2 = (""+phoneStr).replace(/\D/g, ''), 
    m = s2.match(/^(\d{3})?[- ]??[\s]?(\d{3})?[\s]?(\d{4})$/); 
    phoneObj.value = (!m) ? null : "(" + m[1] + ") " + m[2] + "-" + m[3]; 
} 

回答

0

首先你可以將字符串轉換爲小寫,或者讓你對正則表達式不區分大小寫,這樣你就不必處理大小寫差異了。

可能有其他的方法來解析的電話號碼,但給定的正則表達式,你可以做這樣一個變化:

^(\d{3})?[- ]??[\s]?(\d{3})?[\s]?(\d{4})(\s+(ext|\*)?\s*\d{4})?$ 

在這裏,我認爲之前和ext*後有一個空間。希望這可以給你提供想法,你可以改進它以符合你的要求。

還要檢查這些問題的答案:

+0

感謝您的意見。這雖然沒有回答我的問題。請重新閱讀。如上所述,當電話格式化功能完成時,我需要能夠讓n個任意字符通過擴展。相關問題也沒有解決這個具體問題。 –

+0

那麼你的問題並沒有太大的關注,因爲你提到擴展名必須以'ext','*'或'space'開頭,所以我想你也需要對擴展部分的格式進行某種驗證。很高興你知道了。 –

+0

不,沒有說明。我表示可以從任何事情開始。再次重讀。謝謝..... –

0

我想通了。我認爲這比實際更困難。傻我。解決方案:

function formatPhone(phoneObj){ 
    var phoneStr = phoneObj.value, 
    s2 = (""+phoneStr).replace(/\D/g, ''), 
    m = s2.match(/^(\d{3})?[- ]??[\s]?(\d{3})?[\s]?(\d{4})?(.*)?$/); 
    phoneObj.value = (!m) ? null : "(" + m[1] + ") " + m[2] + "-" + m[3]+ "x" + m[4]; 
} 
相關問題