Sint-Anna
,但是我想知道,有没有一种更简单的方法,因为它看起来很混乱?String.prototype.capitalize = function(){
var sa = this.replace(/-/g,' ');
var saa = sa.toLowerCase();
var sb = saa.replace( /(^|\s)([a-z])/g , function(m,p1,p2){ return p1+p2.toUpperCase(); } );
var sc = sb.replace(/\s+/g, '-');
return sc;
};
console.log('sint-anna'.capitalize());
console.log('sint anna'.capitalize());
console.log('sint-Anna'.capitalize());
console.log('Sint Anna'.capitalize());
console.log('SiNt anna'.capitalize());
console.log('SINT ANNA'.capitalize());
控制台:
Sint-Anna
Sint-Anna
Sint-Anna
Sint-Anna
Sint-Anna
Sint-Anna
不可能有像
Si ntAn na
这样的错误输入导致Si-Ntan-Na
。 #1 楼
您的问题是一个有趣的问题,但是您的解决方案不是很好地使用正则表达式,因为有一个更好的选择是使用“单词边界”锚\b
。边界锚匹配从a到a的过渡。单词,改为非单词,反之亦然。为此,请在正确的解决方案之后使用
\w
匹配来定位字字符。请注意,您为replace操作提供的replace-function现在仅需要
\b
参数,没有如果您的代码编写为:
String.prototype.capitalize = function(){
return this.toLowerCase().replace( /\b\w/g, function (m) {
return m.toUpperCase();
});
};
,那么您将转换为小写字母,然后找到任何单词的第一个字母,然后将其转换为大写。
将其付诸行动,例如:
m
评论
\ $ \ begingroup \ $
我注意到,这将大写字母后的符号的第一个字母,而不是数字后的。例如。 %asdf =%Asdf,但3asdf = 3asdf。不知道这是否是一个问题,但以为我会提到它。
\ $ \ endgroup \ $
– Michael McGriff
2015年1月15日在23:08
\ $ \ begingroup \ $
它的行为不正确,例如Érica(将其转换为éRica)。
\ $ \ endgroup \ $
–伊斯梅尔·米格尔(Ismael Miguel)
15年1月16日,0:25
\ $ \ begingroup \ $
@IsmaelMiguel-是的,确实如此,并提醒我JavaScript不支持RegExes的unicode ......简直糟透了。我试图弄清楚如何更改它(表达式),但是会很丑。
\ $ \ endgroup \ $
–rolfl
15年1月16日,0:41
\ $ \ begingroup \ $
尝试用/ \ b [\ w \ u00E0- \ u00F6 \ u00F7- \ u00FF] /或/ \ b [\wà-öø-ÿ] /替换/ \ b \ w /。您可以在此处检查更多UTF8间隔:utf8-chartable.de/unicode-utf8-table.pl?number=512
\ $ \ endgroup \ $
–伊斯梅尔·米格尔(Ismael Miguel)
15年1月16日在12:47
\ $ \ begingroup \ $
作为旁注,您应该将更改为。如今,使用内联事件是一件坏事。使用更好的事件监听器。甚至field.oninput = function(){}都比内联处理程序好。
\ $ \ endgroup \ $
–伊斯梅尔·米格尔(Ismael Miguel)
15年1月16日在12:52
#2 楼
使数组中所有首字母大写的最简单方法:for (var i = 0 ; i < yourArray.length ; i++) {
curTokens[i] = yourArray[i].charAt(0).toUpperCase()+yourArray[i].substr(1);
}
console.log(yourArray);
每个第一个字符都使用
charAt(0)
获取,并使用.toUpperCase()
更改为大写。我们使用yourArray.substr(1);
附加字符串的其余部分。
评论
我知道您说的是javascript,但我来晚了,但是如果适合您,也可以使用CSS。文本转换:大写完全可以按照您的需要进行操作。