我一直在寻找如何使用 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#。
最佳答案
结合类似帖子的一些答案:
var selElem = document.getElementById("fromName");
selElem.addEventListener("change", function() {
document.getElementById("result").innerHTML = properName(selElem.value);
});
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();
}));
}
<p>
Choose a name to see it properly capitalised:
</p>
<select id="fromName">
<option>Select a name</option>
<option>EMMA HURST</option>
<option>CHRIS HINDI</option>
<option>OSCAR GRENFELL</option>
<option>JIM CASEY</option>
<option>MEOW-LUDO DISCO GAMMA MEOW-MEOW</option>
<option>PAT SHEIL</option>
<option>NOEL MCFARLANE</option>
<option>CHRIS MCLACHLAN</option>
<option>ANTHONY ALBANESE</option>
<option>DAVID VAN GOGH</option>
<option>JAMIE ELVY</option>
</select>
<p>Result: <span id="result"></span></p>
关于javascript - 如何在 JavaScript 中将名称放入标题大小写中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4134494/