在JS中格式化地址,以在数字前添加“,”

时间:2018-07-12 09:58:53

标签: javascript jquery

我需要用大写首字母和数字前的", "格式化地址。例如:

zur sandgrube 17  -> Zur Sandgrube, 17

我这样做的方式是检查文本框何时更新。但是,只有在删除空格并更新大写字母的第一个函数时,它才会更改。

我认为第二个功能indf

有问题
$("input[type='text']").change(function(e) {
  switch (e.target.name) {
    case 'firstname':
    case 'lastname':
    case 'address2':
    case 'company':
    case 'city':
      formatta(e);
      break;
    case 'address1':
      formatta(e);
      indf(e);
      break;
    case 'dni':
      e.target.value = e.target.value.toUpperCase();
      break;
  }
});

function formatta(e) {
  //this work, capitalize and delete double spaces
}

function indf(e) {
  var tmp = $.trim(e.target.value);
  var ct = 0;
  for (x = 5; x < tmp.length; x++) {
    if (ct == 0) {
      if (tmp.charAt(x) == 0 || tmp.charAt(x) == 1 || tmp.charAt(x) == 2 || tmp.charAt(x) == 3 || tmp.charAt(x) == 4 || tmp.charAt(x) == 5 || tmp.charAt(x) == 6 || tmp.charAt(x) == 7 || tmp.charAt(x) == 8 || tmp.charAt(x) == 9) {
        ct = 1;
        tmp = tmp.substring(0, x - 1) + "," + tmp.substring(x, tmp.length);
      }

    }
  }
  e.target.value = tmp;
}

2 个答案:

答案 0 :(得分:3)

您可以通过结合使用多个正则表达式来实现。 this answer中有一个方便的函数,可以将给定字符串中的每个单词大写。然后,您可以使用\s+查找所有重复的空格,并使用\s\d+查找以逗号开头的数值。试试这个:

function formatta(s) {
  s = toTitleCase(s); // capitalise
  s = s.replace(/\s+/, ' '); // remove repeated whitespace
  s = s.replace(/\s(\d+)/, ', $1'); // add the comma before number
  return s;
}

function toTitleCase(str) {
  return str.replace(/\w\S*/g, function(txt) {
    return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
  });
}

console.log(formatta('zur   sandgrube 17'));

答案 1 :(得分:0)

使用.split将名称字符串分割为一个数组。将每个部分传递给首字母大写的函数,如果isNan,则返回大写的字符串,否则返回数字前面的逗号。

从这些部分中构建一个新字符串,替换逗号前面的空格。

var origStr = "zur sandgrube 17";


var strPortions = origStr.split(' ');

var newString = '';

strPortions.forEach(function(portion){
  newString += capitalise(portion);
})
console.log(newString.replace(/ ,/,',')); // gives Zur Sandgrube, 17

function capitalise(str) {
  var firstLetter = str.charAt(0).toUpperCase();
  var newStr ='';
  isNaN(firstLetter)
   ? newStr = firstLetter + str.slice(1) + ' '
   : newStr =  ', ' + str;
   return newStr;
}