我需要用大写首字母和数字前的", "
格式化地址。例如:
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;
}
答案 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;
}