0

我正在尝试制作一个动态地址构建器以与 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, , , ,

此外,在某些情况下(至少对于我所在的地区而言),同一位置有两个名称,我们使用 coma 来分隔它们。例如,地址可以变成这样:

MyAddress, MySecondAddress, Cityname, State, zipCode, Country

问题:

虽然地址是自动构建的,但如何使用正则表达式从地址字符串中删除剩余的逗号?

4

3 回答 3

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(or undefined) 时,该值不会添加到结果数组中。

于 2013-09-26T07:10:24.457 回答
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 对输入进行分组。

于 2013-09-26T07:56:37.550 回答
0
address = address.replace(/( ?,)+/, '');
于 2013-09-26T07:12:50.700 回答