2012-11-19 77 views
0

我目前使用下面的腳本來獲取任何形式的信息,並提取數字以製作一個帶破折號的電話號碼。但是,如果我不小心在該字段中單擊,即使沒有粘貼或鍵入任何內容,它仍會在其中放入兩個破折號。 JS有沒有辦法只有在粘貼東西時才添加破折號?這是一個痛苦的原因是我有2個搜索字段,如果我想使用一個,另一個必須是空白的。所以如果它有2個破折號,我必須將它們刪除並在同一個字段中輸入,否則它會再次添加。帶有自動破折號的Javascript

我很感謝您的幫助。

<SCRIPT LANGUAGE="JavaScript"> 
    function addDashes(f) 
    { 
     f.value = f.value.replace(/\D/g, ''); 
     f.value = f.value.slice(0,3)+"-"+f.value.slice(3,6)+"-"+f.value.slice(6,15); 
    } 
</SCRIPT> 
+0

你怎麼調用'addDashes'函數? – lbstr

+0

在添加破折號前檢查「f.value」是否爲空字符串 –

回答

0

我不太清楚,如果這是你需要什麼,但是這只是檢查是否確實有那麼點意思格式化前:

function addDashes(f) 
{ 
    var oldVal = f.value.replace(/\D/g, ''); 
    if (oldVal.length) { 
     f.value = oldVal.slice(0,3) + "-" + oldVal.slice(3,6) + "-" + oldVal.slice(6,15); 
    } 
} 

編輯:

根據您的評論,我認爲這可能有助於提出驗證。我不確定你是否在服務器端做了任何事情,以確保它是一個有效的電話號碼,但它可能有助於做一些驗證,以便在用戶輸入一些內容時不添加破折號空間。

首先,我會在檢查長度之前刪除非數字值。我已經更新了上面的代碼來做到這一點。

接下來,我會檢查一段時間。如果該數字至少爲9位數字,可能只想添加短劃線。你可以決定你要檢查的長度。在這種情況下,你可以這樣:

if (oldVal.length >= 9) { ... 

這一切都取決於是否/如何您要驗證這個領域。

+0

Dang,我有4分鐘的時間來接受答案。這工作。 – traveler84

+0

還有一點評論,我認爲有這樣的代碼。我感謝你幫助我。當我在那裏放置一個空間時,它確實會添加破折號(這很好),但是當我刪除它們時,它仍然消失。完善! – traveler84

+0

我已經對我的回答進行了一些更改以反映此評論。我認爲這是一個好主意,可以進行一些驗證,以便在輸入空格後不添加破折號。 – lbstr

2

我會像這樣的東西去:

function addDashes(f) { 
    f.value = f.value.replace(/(\d{3})-?(\d{3})-?(\d{9})/, '$1-$2-$3'); 
} 

,如果你有15個數字有它只會做一些事情(可能與破折號已經到位)。