如何将字符串的第一个字母设为大写,但不更改任何其他字母的大小写?
例如:
"this is a test"
- > "This is a test"
"the Eiffel Tower"
- > "The Eiffel Tower"
"/index.html"
- > "/index.html"
Steve Harris.. 5505
function capitalizeFirstLetter(string) { return string.charAt(0).toUpperCase() + string.slice(1); }
其他一些答案String.prototype
也会修改(这个答案也是如此),但由于可维护性,我现在建议不要这样做(很难找到函数的添加位置,prototype
如果其他代码使用相同名称/浏览器,可能会导致冲突在将来添加具有相同名称的本机函数.
function capitalizeFirstLetter(string) { return string.charAt(0).toUpperCase() + string.slice(1); }
其他一些答案String.prototype
也会修改(这个答案也是如此),但由于可维护性,我现在建议不要这样做(很难找到函数的添加位置,prototype
如果其他代码使用相同名称/浏览器,可能会导致冲突在将来添加具有相同名称的本机函数.
更面向对象的方法:
String.prototype.capitalize = function() { return this.charAt(0).toUpperCase() + this.slice(1); }
然后:
"hello world".capitalize();
在CSS中:
p:first-letter { text-transform:capitalize; }
以下是流行答案的缩短版本,通过将字符串视为数组来获取第一个字母:
function capitalize(s) { return s[0].toUpperCase() + s.slice(1); }
更新:
根据下面的评论,这在IE 7或更低版本中不起作用.
更新2:
为避免undefined
空字符串(请参阅下面的@ njzk2注释),您可以检查空字符串:
function capitalize(s) { return s && s[0].toUpperCase() + s.slice(1); }
以下是基于此jsperf测试的最快方法(从最快到最慢排序).
正如您所看到的,前两种方法在性能方面基本相当,而改变方法在性能方面String.prototype
是最慢的.
// 10,889,187 operations/sec function capitalizeFirstLetter(string) { return string[0].toUpperCase() + string.slice(1); } // 10,875,535 operations/sec function capitalizeFirstLetter(string) { return string.charAt(0).toUpperCase() + string.slice(1); } // 4,632,536 operations/sec function capitalizeFirstLetter(string) { return string.replace(/^./, string[0].toUpperCase()); } // 1,977,828 operations/sec String.prototype.capitalizeFirstLetter = function() { return this.charAt(0).toUpperCase() + this.slice(1); }
对于另一种情况,我需要它来大写第一个字母和小写其余部分.以下案例让我改变了这个功能:
//es5 function capitalize(string) { return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase(); } capitalize("alfredo") // => "Alfredo" capitalize("Alejandro")// => "Alejandro capitalize("ALBERTO") // => "Alberto" capitalize("ArMaNdO") // => "Armando" // es6 using destructuring const capitalize = ([first,...rest]) => first.toUpperCase() + rest.join('').toLowerCase();
这是2018年的ES6 +解决方案:
const str = 'the Eiffel Tower';
const newStr = `${str[0].toUpperCase()}${str.slice(1)}`;
console.log('Original String:', str); // the Eiffel Tower
console.log('New String:', newStr); // The Eiffel Tower
将字符串中所有单词的首字母大写:
function ucFirstAllWords( str ) { var pieces = str.split(" "); for ( var i = 0; i < pieces.length; i++ ) { var j = pieces[i].charAt(0).toUpperCase(); pieces[i] = j + pieces[i].substr(1); } return pieces.join(" "); }
var string = "hello world"; string = string.charAt(0).toUpperCase() + string.slice(1); alert(string);
如果您已经(或正在考虑)使用lodash
,解决方案很简单:
_.upperFirst('fred'); // => 'Fred' _.upperFirst('FRED'); // => 'FRED' _.capitalize('fred') //=> 'Fred'
查看他们的文档:https://lodash.com/docs#capitalize
_.camelCase('Foo Bar'); //=> 'fooBar'
https://lodash.com/docs/4.15.0#camelCase
_.lowerFirst('Fred'); // => 'fred' _.lowerFirst('FRED'); // => 'fRED' _.snakeCase('Foo Bar'); // => 'foo_bar'
第一个大写的Vanilla js:
function upperCaseFirst(str){ return str.charAt(0).toUpperCase() + str.substring(1); }
我们可以用我最喜欢的第一个角色RegExp
,看起来像一个可爱的笑脸:/^./
String.prototype.capitalize = function () { return this.replace(/^./, function (match) { return match.toUpperCase(); }); };
对于所有咖啡爱好者:
String::capitalize = -> @replace /^./, (match) -> match.toUpperCase()
...并且对于那些认为有更好的方法来做这件事的人而言,如果不扩展原生原型:
var capitalize = function (input) { return input.replace(/^./, function (match) { return match.toUpperCase(); }); };
String.prototype.capitalize = function(allWords) { return (allWords) ? // if all words this.split(' ').map(word => word.capitalize()).join(' ') : //break down phrase to words then recursive calls until capitalizing all words this.charAt(0).toUpperCase() + this.slice(1); // if allWords is undefined , capitalize only the first word , mean the first char of the whole string }
然后:
"capitalize just the first word".capitalize(); ==> "Capitalize just the first word" "capitalize all words".capitalize(true); ==> "Capitalize All Words"
const capitalize = (string = '') => [...string].map( //convert to array with each item is a char of string by using spread operator (...) (char, index) => index ? char : char.toUpperCase() // index true means not equal 0 , so (!index) is the first char which is capitalized by `toUpperCase()` method ).join('') //return back to string
然后 capitalize("hello") // Hello
如果使用underscore.js或Lo-Dash,则underscore.string库提供字符串扩展,包括大写:
_.capitalize(string)将字符串的第一个字母转换为大写.
例:
_.capitalize("foo bar") == "Foo bar"
p::first-letter { text-transform: uppercase; }
尽管被调用::first-letter
,但它适用于第一个字符,即在字符串的情况下%a
,此选择器将适用于%
并且因此a
不会被大写.
在IE9 +或IE5.5 +中,只有一个冒号(:first-letter
)支持遗留表示法.
由于有很多答案,但在ES2015中没有一个能有效解决原始问题的答案,我想出了以下内容:
const capitalizeFirstChar = str => str.charAt(0).toUpperCase() + str.substring(1);
parameters => function
就是所谓的箭头功能.
我选择了名字capitalizeFirstChar
而不是capitalizeFirstLetter
,因为OP并没有要求代码将整个字符串中的第一个字母大写,而是第一个字母(当然,如果是字母).
const
使我们能够声明capitalizeFirstChar
为常量,这是所希望的,因为作为程序员,你应该始终明确说明你的意图.
在我执行的基准测试中,string.charAt(0)
和之间没有显着差异string[0]
.但请注意,那string[0]
将是undefined
空字符串,因此应该重写string && string[0]
,与替代方案相比,这太冗长了.
string.substring(1)
比...更快string.slice(1)
.
此解决方案为4,956,962 ops/s±3.03%,
最多投票回答4,577,946 ops/s±1.2%.
在Google Chrome 57上使用JSBench.me创建.
var capitalized = yourstring[0].toUpperCase() + yourstring.substr(1);
在CSS中似乎更容易:
This is some text.
这是来自CSS text-transform Property(在W3Schools).
首先使用CSS处理这些东西总是更好,一般来说,如果你可以使用CSS解决问题,先去做,然后尝试JavaScript来解决你的问题,所以在这种情况下尝试使用:first-letter
CSS并申请text-transform:capitalize;
因此,尝试为此创建一个类,以便您可以全局使用它,例如:.first-letter-uppercase
并在CSS中添加如下内容:
.first-letter-uppercase:first-letter { text-transform:capitalize; }
另外一个选择是JavaScript,所以最好是这样的:
function capitalizeTxt(txt) { return txt.charAt(0).toUpperCase() + txt.slice(1); //or if you want lowercase the rest txt.slice(1).toLowerCase(); }
并称之为:
capitalizeTxt('this is a test'); // return 'This is a test' capitalizeTxt('the Eiffel Tower'); // return 'The Eiffel Tower' capitalizeTxt('/index.html'); // return '/index.html' capitalizeTxt('alireza'); // return 'Alireza'
如果你想一遍又一遍地重复使用它,最好将它附加到javascript原生String,如下所示:
String.prototype.capitalizeTxt = String.prototype.capitalizeTxt || function() { return this.charAt(0).toUpperCase() + this.slice(1); }
并将其命名如下:
'this is a test'.capitalizeTxt(); // return 'This is a test' 'the Eiffel Tower'.capitalizeTxt(); // return 'The Eiffel Tower' '/index.html'.capitalizeTxt(); // return '/index.html' 'alireza'.capitalizeTxt(); // return 'Alireza'
如果您想重新格式化全文字幕文本,您可能希望修改其他示例:
function capitalize (text) { return text.charAt(0).toUpperCase() + text.slice(1).toLowerCase(); }
这将确保更改以下文本:
TEST => Test This Is A TeST => This is a test
var str = "ruby java";
console.log(str.charAt(0).toUpperCase() + str.substring(1));
它会回来 "Ruby java"
http://jsfiddle.net/amitpandya/908c8e2v/
结果链接在jsfiddle中
有一种非常简单的方法可以通过替换来实现它.对于ES6:
'foo'.replace(/^./, str => str.toUpperCase())
结果:
'Foo'
function capitalize(s) { // returns the first letter capitalized + the string from index 1 and out aka. the rest of the string return s[0].toUpperCase() + s.substr(1); } // examples capitalize('this is a test'); => 'This is a test' capitalize('the Eiffel Tower'); => 'The Eiffel Tower' capitalize('/index.html'); => '/index.html'
SHORTEST 3解决方案,1和2处理s
字符串时的情况""
,null
并且undefined
:
s&&s[0].toUpperCase()+s.slice(1) // 32 char s&&s.replace(/./,s[0].toUpperCase()) // 36 char - using regexp 'foo'.replace(/./,x=>x.toUpperCase()) // 31 char - direct on string, ES6
对于s ='foo bar',我们得到
let s='foo bar';
console.log( s&&s[0].toUpperCase()+s.slice(1) );
console.log( s&&s.replace(/./,s[0].toUpperCase()) );
console.log( 'foo bar'.replace(/./,x=>x.toUpperCase()) );
这是一个名为ucfirst()的函数( "大写首字母"的缩写):
function ucfirst(str) { var firstLetter = str.substr(0, 1); return firstLetter.toUpperCase() + str.substr(1); }
您可以通过调用ucfirst("some string")来大写字符串- 例如,
ucfirst("this is a test") --> "This is a test"
它的工作原理是将字符串分成两部分.在第一行它拉出firstLetter然后在第二行它通过调用firstLetter.toUpperCase()来大写firstLetter并将它与字符串的其余部分连接起来,这是通过调用str.substr(1)找到的.
您可能会认为这对于一个空字符串会失败,实际上在像C这样的语言中你必须要满足这个要求.但是在JavaScript中,当您获取空字符串的子字符串时,您只需返回一个空字符串.
String.prototype.capitalize = function(){ return this.replace( /(^|\s)([a-z])/g , function(m,p1,p2){ return p1+p2.toUpperCase(); } ); };
用法:
capitalizedString = someString.capitalize();
这是一个文本字符串=>这是一个文本字符串
var str = "test string"; str = str.substring(0,1).toUpperCase() + str.substring(1);
检查此解决方案:
var stringVal = 'master'; stringVal.replace(/^./, stringVal[0].toUpperCase()); // returns Master
yourString.replace(/^[a-z]/, function(m){ return m.toUpperCase() });
(您可以将其封装在函数中,如果经常使用它,甚至可以将其添加到String原型中.)
ucfirst
如果你这样做,该功能有效.
function ucfirst(str) { var firstLetter = str.slice(0,1); return firstLetter.toUpperCase() + str.substring(1); }
感谢JP的批评.
你可以像这样在一行中完成
string[0].toUpperCase() + string.substring(1)
yourString.replace(/\w/, c => c.toUpperCase())
我发现这个箭头功能最简单.替换匹配\w
字符串的第一个字母字符()并将其转换为大写.没有什么比这更好的了.
一种功能性方法
const capitalize = ([s, ...tring]) => [s.toUpperCase(), ...tring] .join('');
那你可以
const titleCase = str => str .split(' ') .map(capitalize) .join(' ')
在CoffeeScript中,为字符串添加原型:
String::capitalize = -> @substr(0, 1).toUpperCase() + @substr(1)
用法是:
"woobie".capitalize()
产量:
"Woobie"
function capitalize(string) { return string.replace(/^./, Function.call.bind("".toUpperCase)); }
发布@ salim的答案编辑,包括区域设置字母转换.
var str = "test string"; str = str.substring(0,1).toLocaleUpperCase() + str.substring(1);
我没有在与星界码点或国际化有关的问题的现有答案中看到任何提及."大写"在使用给定脚本的每种语言中并不意味着相同.
最初,我没有看到任何解决与星界平面码点相关的问题的答案.有一个,但它有点埋没(就像这个,我猜!)
大多数提议的函数看起来像这样:
function capitalizeFirstLetter(str) { return str[0].toUpperCase() + str.slice(1); }
但是,一些外壳字符不属于BMP(基本多语言平面,代码点U + 0到U + FFFF).例如,拿这个Deseret文本:
capitalizeFirstLetter(""); // ""
此处的第一个字符无法大写,因为字符串的数组索引属性不访问字符或代码点.他们访问UTF-16代码单元.切片时也是如此 - 索引值指向代码单元.
碰巧是UTF-16代码单元是两个范围内的代码点的代码点的1:1,U + 0到U + D7FF和U + E000到U + FFFF.大多数套装字符属于这两个范围,但不是全部.
从ES2015开始,处理这个变得容易一些.String.prototype[@@iterator]
产生对应于码点*的字符串.例如,我们可以这样做:
function capitalizeFirstLetter([ first, ...rest ]) { return [ first.toUpperCase(), ...rest ].join(''); } capitalizeFirstLetter("") // ""
对于更长的字符串,这可能不是非常有效** - 我们实际上不需要迭代余数.我们可以String.prototype.codePointAt
用来获取第一个(可能的)字母,但我们仍然需要确定切片应该从哪里开始.避免迭代余数的一种方法是测试第一个代码点是否在BMP之外; 如果不是,则切片从1开始,如果是,则切片从2开始.
function capitalizeFirstLetter(str) { const firstCP = str.codePointAt(0); const index = firstCP > 0xFFFF ? 2 : 1; return String.fromCodePoint(firstCP).toUpperCase() + str.slice(index); } capitalizeFirstLetter("") // ""
如果需要,我们还可以在ES5及更低版本中使用该逻辑.ES5中没有用于处理代码点的内在方法,因此我们必须手动测试第一个代码单元是否是代理***:
function capitalizeFirstLetter(str) { var firstCodeUnit = str[0]; if (firstCodeUnit < '\uD800' || firstCodeUnit > '\uDFFF') { return str[0].toUpperCase() + str.slice(1); } return str.slice(0, 2).toUpperCase() + str.slice(2); } capitalizeFirstLetter("") // ""
一开始我还提到了国际化的考虑.其中有些是很难解释,因为他们需要的知识不仅什么正在使用的语言,但也可能需要在语言中的单词的具体知识.例如,爱尔兰有向图"MB"大写为"MB"在一个单词的开始,而德国eszett从来没有开始一个字(据我所知),这意味着在德国的"SS" lowercasing需要更多的知识(也可能是"ss"或它可能是"ß",取决于单词).
这个问题最着名的例子可能是土耳其语.在土耳其语拉丁语中,i的大写形式是İ,而I的小写形式是ı - 它们是两个不同的字母.幸运的是,我们确实有办法解释这个问题:
function capitalizeFirstLetter([ first, ...rest ], locale) { return [ first.toLocaleUpperCase(locale), ...rest ].join(''); } capitalizeFirstLetter("italya", "en") // "Italya" capitalizeFirstLetter("italya", "tr") // "?talya"
在浏览器中,用户的最喜欢的语言标签由navigator.language
,在其中找到按优先顺序排列的列表navigator.languages
,并且可以获得给定的DOM元素的语言Object(element.closest('[lang]')).lang || YOUR_DEFAULT_HERE
.
很可能,提出这个问题的人不会关注Deseret的资本化或国际化.但是要注意这些问题是件好事,因为即使他们现在不担心,你也很有可能会遇到这些问题.他们不是"边缘"的情况下,或者说,他们不是通过清晰的边缘情况-有一个全国大多数人说土耳其语,反正和混为一谈代码单位代码点是错误的一个相当普遍的来源(尤其是关于表情符号).字符串和语言都非常复杂!
*或代理代码单元,如果是孤立的
**也许.我没有测试过.除非你已经确定大写是一个有意义的瓶颈,否则我可能不会出汗 - 选择你认为最清晰可读的东西.
***这样的函数可能希望测试第一和第二代码单元而不是第一代码单元,因为第一单元可能是孤立的代理.例如,输入"\ uD800x"将按原样大写X,这可能是也可能不是预期的.
// Uppercase first letter function ucfirst(field) { field.value = field.value.substr(0, 1).toUpperCase() + field.value.substr(1); }
用法:
一种可能的方案:
function ConvertFirstCharacterToUpperCase(text) { return text.substr(0, 1).toUpperCase() + text.substr(1); }
用这个:
alert(ConvertFirstCharacterToUpperCase("this is string"));
这是JS Fiddle的工作
这是我的版本,我认为它也很容易理解和优雅.
var str = "foo bar baz"; // capitalize str.split(' ') .map(w => w[0].toUpperCase() + w.substr(1).toLowerCase()) .join(' ') // returns "Foo Bar Baz" // capitalize first letter str.charAt(0).toUpperCase() + str.slice(1) // returns "Foo bar baz"
CoffeeScript的
ucfirst = (str) -> str.charAt(0).toUpperCase() + str.slice(1)
作为String原型方法:
String::capitalize = -> @charAt(0).toUpperCase() + @slice(1)
或者你可以使用Sugar.js capitalize()
例:
'hello'.capitalize() -> 'Hello' 'hello kitty'.capitalize() -> 'Hello kitty' 'hello kitty'.capitalize(true) -> 'Hello Kitty'
使用原型
String.prototype.capitalize = function () { return this.charAt(0) + this.slice(1).toLowerCase(); }
或使用功能
function capitalize(str) { return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase(); }
这个解决方案可能是新的,可能是最简单的.
function firstUpperCase(input)
{
return input[0].toUpperCase()+input.substr(1);
}
console.log(firstUpperCase("capitalize first letter"));
这是我尝试制作一个通用函数,它只能使第一个字母或每个单词的第一个字母大写,包括用短划线分隔的单词(就像法语中的一些名字一样).
默认情况下,该函数仅使首字母大写,而其余部分保持不变.
参数:
lc:true将小写的其余部分全部小写 :true以将每个单词大写
if (typeof String.prototype.capitalize !== 'function') { String.prototype.capitalize = function(lc, all) { if (all) { return this.split( " " ).map( function(currentValue, index, array ) { return currentValue.capitalize( lc ); }, this).join(" ").split("-").map(function(currentValue, index, array) { return currentValue.capitalize(false); }, this).join("-"); } else { return lc ? this.charAt(0).toUpperCase() + this.slice(1 ).toLowerCase() : this.charAt(0).toUpperCase() + this.slice(1); } } }
a.slice(0,1).toUpperCase()+a.slice(1)
let a = 'hello',
fix = a.slice(0,1).toUpperCase()+a.slice(1)
console.log(fix)
有多种方法可以尝试以下方法
var lower = 'the Eiffel Tower'; var upper = lower.charAt(0).toUpperCase() + lower.substr(1);
如果您对正则表达式感到满意,那么您可以这样做:
var upper = lower.replace(/^\w/, function (chr) { return chr.toUpperCase(); });
您甚至可以通过使用更现代的语法更进一步:
const upper = lower.replace(/^\w/, c => c.toUpperCase());
此外,这将照顾示例中提到的负面情况,例如以特殊字符开头的单词!@#$%^&*()}{{[];':",.<>/?
.
如果您使用其中一个正则表达式的答案,请记住它们只能使用ASCII字符.你所有的unicode字母都不会大写.该XRegExp如果你想坚持用正则表达式库和它的Unicode插件解决这个问题.所以像这样的东西会起作用:
String.prototype.capitalize = function () { return this.replace(XRegExp("^\\p{L}"), function ($0) { return $0.toUpperCase(); }) }
考虑到它仍然没有涵盖所有可能性(组合字符,请参阅http://www.regular-expressions.info/unicode.html),使用.charAt(0).toUpperCase()方法似乎更容易.
var capitalizeMe = "string not starting with capital"
利用substr进行资本化
var capitalized = capitalizeMe.substr(0, 1).toUpperCase() + capitalizeMe.substr(1);
仅用于大写第一个字母并使字符串的其余部分为小写:
function capitalize(str) { var splittedEnter = str.split(" "); var capitalized; var capitalizedResult; for (var i = 0 ; i < splittedEnter.length ; i++){ capitalized = splittedEnter[i].charAt(0).toUpperCase(); splittedEnter[i] = capitalized + splittedEnter[i].substr(1).toLowerCase(); } return splittedEnter.join(" "); } capitalize("tHiS wiLL be alL CapiTaLiZED.");
结果将是:
这将全部资本化.
编辑:感谢Peter Mortensen编辑:)
好的,所以我是JavaScript新手.我无法让上述内容为我工作.所以我开始自己把它放在一起.这是我的想法(关于相同,不同和有效的语法):
String name = request.getParameter("name"); name = name.toUpperCase().charAt(0) + name.substring(1); out.println(name);
在这里,我从表单中获取变量(它也可以手动工作):
String name = "i am a Smartypants..."; name = name.toUpperCase().charAt(0) + name.substring(1); out.println(name);
输出:"我是Smartypants ......";
57 81这个问题的不同答案,有些是题外话的,但是没有一个提出了一个重要的问题,即列出的解决方案都无法在许多浏览器中使用亚洲字符,表情符号和其他高Unicode点值字符。这是一个解决方案,它将:
const consistantCapitalizeFirstLetter = "\uD852\uDF62".length === 1 ? function(S) { "use-strict"; // Hooray! The browser uses UTF32! return S.charAt(0).toUpperCase() + string.substring(1); } : function(S) { "use-strict"; // the browser is using UCS16 to store UTF16 var code = S.charCodeAt(0)|0; return ( code >= 0xD800 && code <= 0xDBFF ? // detect surrogate pair S.slice(0,2).toUpperCase() + string.substring(2) : S.charAt(0).toUpperCase() + string.substring(1) ); }; const prettyCapitalizeFirstLetter = "\uD852\uDF62".length === 1 ? function(S) { "use-strict"; // Hooray! The browser uses UTF32! return S.charAt(0).toLocaleUpperCase() + string.substring(1); } : function(S) { "use-strict"; // the browser is using UCS16 to store UTF16 var code = S.charCodeAt(0)|0; return ( code >= 0xD800 && code <= 0xDBFF ? // detect surrogate pair S.slice(0,2).toLocaleUpperCase() + string.substring(2) : S.charAt(0).toLocaleUpperCase() + string.substring(1) ); };
请注意,以上解决方案尝试考虑UTF32。但是,该规范正式声明,要求浏览器在映射到UCS2的UTF16中执行所有操作。但是,如果大家一起努力,开始准备UTF32,那么TC39就有可能允许浏览器开始使用UTF32(例如Python如何对字符串的每个字符使用24位)。对于讲英语的人来说,这似乎很愚蠢:没有人仅使用latin-1曾与Mojibake打交道因为所有字符编码都支持Latin-I。但是,其他国家/地区的用户(例如中国,日本,印度尼西亚等)并不那么幸运。他们不仅在网页上,而且还在Javascript中不断努力解决编码问题:Javascript将许多中文/日文字符视为两个字母,因此中间可能会被分开,从而导致?和?(两个对最终用户没有意义的问号)。如果我们可以开始准备使用UTF32,那么TC39可能只允许浏览器执行Python多年以前所做的事情,这使得Python在处理高Unicode字符方面非常受欢迎:使用UTF32。
consistantCapitalizeFirstLetter
在IE3 +中可以正常工作。prettyCapitalizeFirstLetter
需要IE5.5 +(请参阅本文档第250页的顶部)。但是,这些事实更多是个笑话,因为您的网页上的其余代码很可能甚至无法在IE8中使用-因为所有DOM和JScript错误以及这些旧版浏览器中缺少功能。此外,没有人再使用IE3或IE5.5。
喜欢它:
function capitalize(string,a) { var tempstr = string.toLowerCase(); if (a == false || a == undefined) return tempstr.replace(tempstr[0], tempstr[0].toUpperCase()); else { return tempstr.split(" ").map(function (i) { return i[0].toUpperCase() + i.substring(1) }).join(" "); } } capitalize('stack overflow yeah!',true)); //Stack Overflow Yeah! capitalize('stack stack stack stack overflow yeah!'));//Stack overflow yeah!
https://jsfiddle.net/dgmLgv7b/
单行:
'string'.replace(/(^[a-z])/,function (p) { return p.toUpperCase(); } )
一个小的改进 - 标题中的每一个字.
String.prototype.toTitleCase = function(){ return this.replace(/\b(\w+)/g, function(m,p){ return p[0].toUpperCase() + p.substr(1).toLowerCase() }); } var s = 'heLLo wOrLD'; console.log(s.toTitleCase()); // Hello World
我一直在尝试使用jQuery执行相同的操作(即在键入字符串时将首字母大写)。我在网上搜索了所有答案,但找不到。但是我能够on()
像这样在jQuery中使用该功能来解决:
$("#FirstNameField").on("keydown",function(e){ var str = $("#FirstNameField").val(); if(str.substring()===str.substring(0,1)){ $("#FirstNameField").val(str.substring(0,1).toUpperCase()); } });
当数据输入者连续键入时,此函数实际上将首字母大写。
我在开发环境中使用了类似的方法,尤其是在使用HTTP之类的API时:
假设您有一个HTTP标头,您想在其中将每个首字母大写,并在其组成词之间添加连字符。您可以使用以下基本且简单的例程来实现类似目的:
'access control allow origin' .replace(/\b\w/g, function (match) { return match.toUpperCase(); }) .split(' ') .join('-'); // Output: 'Access-Control-Allow-Origin'
它可能不是目前最优雅,最吸引人的函数定义,但是它确实可以完成工作。
首先,只想弄清楚在这种情况下大写的含义。“ 牛逼他的小号特林我小号ç apitalized” 可靠的消息来源
从示例中可以看到,这不是OP所要查找的。它应该说的是“如何使字符串的首字母大写”(不大写字符串)
function ucfirst (str) { return typeof str !="undefined" ? (str += '', str[0].toUpperCase() + str.substr(1)) : '' ; }
讲解
typeof str !="undefined" // is str set ? // true str += '' // turn the string variable into a string str[0].toUpperCase() //get the first character and make it upper case + // add str.substr(1) // string starting from the index 1 ( starts at 0) : // false ''; //return empty string
这将适用于任何参数或根本没有参数。
undefined === "" "" === "" "my string" === "My string" null === "Null" undefined === ""; false === "False" 0 === "0" true === "True" [] === "" [true,0,"",false] === "True,0,,false"
function capitalizeEachWord(str) {
return str.replace(/\w\S*/g, function(txt) {
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
});
}
document.write(capitalizeEachWord('foo BAR God bAD'));
这个很简单
const upper = lower.replace(/^\w/, c => c.toUpperCase());