How to capitalize first letter of each word, like a 2-word city?
当城市只有一个词时,我的JS很好用:
但是当它的时候
我怎样才能让它变成圣地亚哥?
1 2 3 4 5
| function convert_case() {
document.profile_form.city.value =
document.profile_form.city.value.substr(0,1).toUpperCase() +
document.profile_form.city.value.substr(1).toLowerCase();
} |
这里有一个很好的答案:
1 2 3 4 5
| function toTitleCase(str) {
return str.replace(/\w\S*/g, function(txt){
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
});
} |
或在ES6中:
1 2 3 4 5
| var text ="foo bar loo zoo moo";
text = text.toLowerCase()
.split(' ')
.map((s) => s.charAt(0).toUpperCase() + s.substring(1))
.join(' '); |
- 谢谢,德克斯特,这个解决方案非常适合我的需要。
- 只是想知道(可能是个新问题),但javascript如何知道function(txt)参数中的txt是指str?是因为你打电话给str上的replace,所以可以假设?
- 它实际上并不是在EDOCX1中传递(1),而是在"匹配子串"中传递(例如regex的结果)。在developer.mozilla.org/en-us/docs/javascript/reference/…的mozilla dev页面上有一个很好的解释,标题是Specifying a function as a parameter。
- 很好的脚本,但它不适用于音调符号,例如,它将"anders&229;ngstr&246;m"转换为"anders&229;ngstr&246;m"。如果您需要脚本来处理这些字符串,请检查stackoverflow.com/questions/15150168/…
- 我建议使用\b\w而不是\w\S*,因为这将选择每个单词的第一个字母,即使中间的字符是斜线或破折号而不是空格。
- 不适用于非英语单词。
- 我们不应该将字符串的子字符串(1)部分小写吗?您可能想忽略它,或者让它成为可选的。
- substr(1).toLowerCase()将除每个单词中的第一个字符外的所有字符转换为小写-这是OP发布的确切示例所必需的(chicago==>chicago)。如果不想强制字符串的其余部分为小写,可以省略toLowerCase(),但需要保留在substr(1)中,否则每个单词中的第一个字符将结束!
- 如果它没有将连接词(和,for,this,that,等等)大写,那就更好了,因为标题通常不会使这些大写。
- 它不能和口音一起工作…比如"&218;rsula"
- 为什么使用\w?它只匹配ASCII字符(A-Z,A-Z),但不匹配其他语言。我用/\.*\S*/g作为正则表达式,它对我来说似乎很好。
- 这是我的版本,基于@bearcode的链接,与音调符号、短划线、下划线和单引号兼容。例如,"google&229;ngus ou诳lin ou'lin ou lin"将转换为"google&诳197;ngus ou诳lin ou'lin ou lin":function toTitleCase(str) { return str.toLowerCase().replace(/[^\s_'-]+/g, function (word) { return word.replace(/^./, function (firstLetter) { return firstLetter.toUpperCase(); }); }); }。
您可以使用CSS:
1
| p.capitalize {text-transform:capitalize;} |
- w3schools.com/css/pr_text_text-transform.asp
- 感谢您添加我的源;)
- 谢谢Capdragon——但我需要在客户端更改城市名称,并将其作为大写形式保存在数据库中——我认为CSS不允许这样做,是吗?
- 您不能只使用文本转换:Capitalize for Chicago=>Chicago。你会得到芝加哥而不是芝加哥。它只转换字符串的第一个字母。
- CSS只是样式和渲染,所以在注入到数据库之前,您仍然需要确保注入的值是低的并且第一个字母是有上限的。
- 是的,我想是的。
- 请看我在回答中列出的例子。
- 如果数据已为大写,则此操作不起作用
- @艾比纳德当然会。
- @Capdragon,我应该说的是"大写"只会将第一个字母改为大写。因此,如果您的文本已经是大写的,并且您添加了"大写",那么所有的文本都是大写的。希望情况不是这样,但哦,好吧:(w3schools.com/cssref/pr_text_text-transform.asp
- 被否决是因为问题指定了javascript,而您给出了使用不同技术的解决方案。
- 我同意@richardsmith unna的观点,这个问题指定了如何使用javascript来实现这一点。这个回答相当于回答"我如何用纸和笔除数字",用"得到一个计算器并使用除法函数"。
- 由于未使用OPS请求的语言回答,导致投票被否决
- 当问到javascript而不是css时,投反对票。
- 被否决是因为最初的问题要求的是JS解决方案,而不是CSS。
1 2 3 4 5 6
| function convertCase(str) {
var lower = String(str).toLowerCase();
return lower.replace(/(^| )(\w)/g, function(x) {
return x.toUpperCase();
});
} |
- 或者,稍微优雅一点:str.toLowerCase().replace(/(^| )(\w)/g, String.toUpperCase)
- @由于String.toUpperCase将绑定到String对象(this将是String对象,而不是子字符串),因此enver的评论无效。
- 那是绝对正确的。我很抱歉没有测试这个,并且假设它可以工作。
- ES6快捷方式:str.toLowerCase().replace(/(^| )(\w)/g, s => s.toUpperCase())。
- @克劳迪奥朗达:…与答案中的相同:)
- 它不适用于重音符号,例如"&218;rsula"
- @Rakensi的版本不适用于IE 11(可能更低版本)
- @我认为你应该删除你的评论,我看到你已经知道它没有按预期工作,所以没有必要把它留在那里…(还是谢谢你的尝试)
javascript函数:
1 2 3
| String.prototype.capitalize = function(){
return this.replace( /(^|\s)([a-z])/g , function(m,p1,p2){ return p1+p2.toUpperCase(); } );
}; |
要使用此功能:
1
| capitalizedString = someString.toLowerCase().capitalize(); |
同样,这也适用于多个单词字符串。
为了确保将转换后的城市名称插入数据库中,首先大写字母,然后在将其发送到服务器端之前需要使用javascript。CSS只是样式,但实际数据将保持预先样式化。看看这个JSfiddle示例,比较警报消息和样式化输出。
- 看起来不错,但不要把这个加到String.prototype上。
- 如果要添加到string.prototype并添加tolowercase(),则返回if(!String.prototype.toTitleCase) { String.prototype.toTitleCase = function(){ return this.toLowerCase().replace( /(^|\s)([a-z])/g , function(m,p1,p2){ return p1+p2.toUpperCase(); } ); }; }。
- 它不适用于重音符号,例如"&218;rsula"