我一直在研究如何使用JavaScript将名称设置为正确的大小写,例如乔治·麦克尔将成为乔治·麦克霍尔。我能够在Codeproject上找到关于如何做到这一点的文章,以及一个打算这样做的人:
function toProperCase(s){
return s.toLowerCase().replace( /\b((m)(a?c))?(\w)/g,
function($1, $2, $3, $4, $5) {
if($2){
return $3.toUpperCase()+$4+$5.toUpperCase();
}
return $1.toUpperCase();
});
}
这允许我正在寻找的东西。但我需要能够进一步扩展它并添加其他案例。
我发现another page on John Gruber's site做了标题案例,但我只是在做名字。
那么,有没有人有一个扩展它的想法?我真的只是在朝着正确的方向寻找一个点。
编辑: 由于我似乎在这里碰壁,也许有人有办法做服务器端。这至少目前在服务器端使用ColdFusion。我见过C#实现,但此刻我无法转向C#。
答案 0 :(得分:3)
这个怎么样:
if (str==str.toLowerCase() || str==str.toUpperCase())
str = str.toTitleCase();
否则,请妥善保管!
编辑:您可以选择拆分字符串以清除持有Shift键的人太长时间,例如SMith。
答案 1 :(得分:1)
结合类似帖子的几个答案:
function properName(name) {
return ("" + name.replace(/[^\s\-\']+[\s\-\']*/g, function (word) {
return word.charAt(0).toUpperCase() + word.substr(1).toLowerCase();
}).replace(/\b(Van|De|Der|Da|Von)\b/g, function (nobiliaryParticle) {
return nobiliaryParticle.toLowerCase();
}).replace(/Mc(.)/g, function (match, letter3) {
return 'Mc' + letter3.toUpperCase();
}));
}
这个任意地将字母大写在“Mc”之后,而不是在“Mac”之后,并且不能处理像LaSalle或terHorst这样的名字(因为我不需要它们)。