2013-09-26 46 views
0

我正在試圖製作一個動態地址生成器來與GMap Geocoder結合使用。如何使用JavaScript Regex從字符串中刪除剩餘的逗號?

我的代碼是這樣的:

HTML

<input type="text" class="address" /> 
<input type="text" class="city" /> 
<input type="text" class="state" /> 
<input type="text" class="zipCode" /> 
<input type="text" class="country" /> 

的JavaScript

$('.address, .city, .state, .zipCode, .country').blur(
    function() 
    { 
     var address = ''; 

     address += $('.address').val() + ', '; 
     address += $('.city').val() + ', '; 
     address += $('.state').val() + ', '; 
     address += $('.zipCode').val() + ', '; 
     address += $('.country').val(); 

     console.log(address); 
    } 
); 

現在的問題:

當我模糊了我得到在我的控制檯下面的地址欄:

MyAddress, , , , 

而且,在某些情況下(至少在我的領域),有兩個名稱相同的位置和我們使用昏迷分離他們。在例如地址可以成爲這樣的事情:

MyAddress, MySecondAddress, Cityname, State, zipCode, Country 

問題:

,而該地址被自動建造,我怎麼能使用正則表達式刪除地址字符串剩下的逗號?

+1

爲什麼不選擇方法,只將非空字符串添加到'地址'? – Reeno

+1

是否有任何理由使用「class」參數來標識字段而不是「id」參數? –

回答

3

一個可行的方法:

address = address.replace(/,(?:\s*,)+/g, ',').replace(/^,|,$/g, ''); 

但實際上,我可能會做一個有點不同:收集所有的非空值到一個數組,然後加入這個陣列「」:

var $addressFields = $('.address, .city, .state, .zipCode, .country'); 

$addressFields.blur(function() { 
    var nonEmptyParts = $.map($addressFields, function(inp) { 
    var inputStr = $.trim(inp.value); 
    return inputStr === '' ? null : inputStr; 
    }); 
    var fullAddress = nonEmptyParts.join(','); 
    console.log(fullAddress); 
}); 

我在這裏採用了$.map的便捷功能:當回調函數返回null(或undefined)時,該值不會添加到結果數組中。

+0

讓我檢查一下:)無論如何,謝謝你的迴應! :) –

+0

第一種方法運作不好。由於某種原因,第二種替換方法沒有奏效。我爲此嘗試了許多其他組合,但仍然無法使用。無論如何,第二種方法是我需要的!非常感謝:) –

0
address = address.replace(/(?,)+/, ''); 
+0

使用'替換'與字符串參數,而不是正則表達式 - >只是一個替代品。此外,即使這個解決方案有效,它也不會刪除尾隨的逗號。 – raina77ow

2

您應該糾正問題的根源而不是刪除額外的逗號。首先,你不應該以這種方式添加逗號;正如你所看到的,即使該字段爲空,也會添加逗號。

請嘗試是這樣的:

HTML:

<form id="myform"> 
    <input type="text" class="address" name="address" /> 
    <input type="text" class="city" name="city" /> 
    <input type="text" class="state" name="state" /> 
    <input type="text" class="zipCode" name="zipCode" /> 
    <input type="text" class="country" name="country" /> 
</form> 

JS:

var address = []; 

// no need for that long line of selectors 
$("#myform > input").blur(function(e){ 
    if ($(this).val()) { // only add this field if it has a value 
     address.push($(this).val()); 
    } 
    console.log(address.join(', ')); // tada, no more extra commas 
}); 

如果在窗體中有其它輸入,使用div來組輸入代替。

相關問題