7

我想将输入中的所有单词大写(使用 keyup 函数)以格式化输入的名称。

例子 :

约翰·多伊 => 约翰·多伊

约翰·多伊 => 约翰·多伊

汤米李 => 汤米李

目前,我使用此代码:

$("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();
    });
}

但如果单词包含重音字符,则以下字母也是大写的:John Doe => John DöE。

获得我想要的最佳解决方案是什么?

谢谢

4

3 回答 3

9

如果您进行手动边界,则问题出在单词边界上

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

于 2011-10-24T12:31:54.687 回答
4

使用这个:

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'));
于 2011-10-24T12:34:38.593 回答
0

您可以在 keyup 拆分后执行类似的操作,然后获取第一个字符并将其大写,然后全部加入。你可以查看这个链接 我为你写了一个演示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(' ');  
}
于 2011-10-24T12:27:40.550 回答