我正在尝试将动态地址构建器与GMap Geocoder结合使用。
我的代码如下:
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
问题:
当地址自动构建时,如何使用正则表达式从地址字符串中删除剩余的逗号?
答案 0 :(得分: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
)时,该值不会添加到结果数组中。
答案 1 :(得分: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对输入进行分组。
答案 2 :(得分:0)
address = address.replace(/( ?,)+/, '');