我想将输入中的所有单词(使用键盘功能)大写以格式化输入的名称。
示例:
john doe => John Doe
JOHN DOE => John Doe
tommy-lee =>托米利
目前,我使用此代码:
$("input").keyup(function() {
var cp_value= ucwords($(this).val(),true) ;
$(this).val(cp_value );
});
function ucwords(str,force){
str=force ? str.toLowerCase() : str;
return str.replace(/(\b)([a-zA-Z])/g,
function(firstLetter){
return firstLetter.toUpperCase();
});
}
但如果这个单词包含一个突出的字符,则下面的字母也是大写的:JohnDöe=> JohnDöE。
获得我想要的最佳解决方案是什么?
谢谢
答案 0 :(得分:6)
如果您使用手动边界,问题在于边界一词
function ucwords(str,force){
str=force ? str.toLowerCase() : str;
return str.replace(/(^([a-zA-Z\p{M}]))|([ -][a-zA-Z\p{M}])/g,
function(firstLetter){
return firstLetter.toUpperCase();
});
}
并为重音字符添加Unicode
答案 1 :(得分:3)
使用这个:
function ucwords(input) {
var words = input.split(/(\s|-)+/),
output = [];
for (var i = 0, len = words.length; i < len; i += 1) {
output.push(words[i][0].toUpperCase() +
words[i].toLowerCase().substr(1));
}
return output.join('');
}
测试:
console.log(ucwords('JOHN DOE'),
ucwords('tommy-lee'),
ucwords('TOMMY-lee'),
ucwords('John Döe'));
答案 2 :(得分:0)
你可以在keyup split之后做这样的事情,然后得到第一个char并大写它然后加入all。您可以查看此链接,我为您编写了一个演示http://jsfiddle.net/vbx3x/5/
function ucwords(str,force){
str=force ? str.toLowerCase() : str;
var temp= str.split(/(\s|-)+/);
for(var i=0; i<temp.length; i++) {
temp[i] = temp[i].substr(0,1).toUpperCase() + temp[i].substr(1,temp[i].length-1)
}
return temp.join(' ');
}