如何使字符串的第一个字母大写,但不更改任何其他字母的大小写?
例如:
"this is a test"
→"This is a test"
"the Eiffel Tower"
→"The Eiffel Tower"
"/index.html"
→"/index.html"
如何使字符串的第一个字母大写,但不更改任何其他字母的大小写?
例如:
"this is a test"
→"This is a test"
"the Eiffel Tower"
→"The Eiffel Tower"
"/index.html"
→"/index.html"
基本解决方案是:
function capitalizeFirstLetter(string) {
return string.charAt(0).toUpperCase() + string.slice(1);
}
console.log(capitalizeFirstLetter('foo')); // Foo
其他一些答案修改String.prototype
(这个答案也曾经),但由于可维护性,我现在建议不要这样做(很难找出函数被添加到的位置,prototype
并且如果其他代码使用相同的名称/浏览器可能会导致冲突将来会添加一个具有相同名称的本机函数)。
...然后,当您考虑国际化时,这个问题还有很多,正如这个令人惊讶的好答案(埋在下面)所示。
如果您想使用 Unicode 代码点而不是代码单元(例如处理基本多语言平面之外的 Unicode 字符),您可以利用String#[@iterator]
代码点的事实,您可以使用它toLocaleUpperCase
来获取区域设置正确的大写:
const capitalizeFirstLetter = ([ first, ...rest ], locale = navigator.language) =>
first.toLocaleUpperCase(locale) + rest.join('')
console.log(
capitalizeFirstLetter('foo'), // Foo
capitalizeFirstLetter(""), // "" (correct!)
capitalizeFirstLetter("italya", 'tr') // İtalya" (correct in Turkish Latin!)
)
有关更多国际化选项,请参阅下面的原始答案。
这是一种更面向对象的方法:
Object.defineProperty(String.prototype, 'capitalize', {
value: function() {
return this.charAt(0).toUpperCase() + this.slice(1);
},
enumerable: false
});
您将调用该函数,如下所示:
"hello, world!".capitalize();
预期输出为:
"Hello, world!"
在 CSS 中:
p::first-letter {
text-transform:capitalize;
}
这是流行答案的缩短版本,它通过将字符串视为数组来获取第一个字母:
function capitalize(s)
{
return s[0].toUpperCase() + s.slice(1);
}
根据下面的评论,这在 IE 7 或更低版本中不起作用。
为避免出现undefined
空字符串(请参阅下面的 @njzk2 评论),您可以检查空字符串:
function capitalize(s)
{
return s && s[0].toUpperCase() + s.slice(1);
}
const capitalize = s => s && s[0].toUpperCase() + s.slice(1)
// to always return type string event when s may be falsy other than empty-string
const capitalize = s => (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);
}
在与星体平面代码点或国际化相关的问题的现有答案中,我没有看到任何提及。“大写”在使用给定脚本的每种语言中并不意味着相同的东西。
最初,我没有看到任何解决与星体平面代码点相关的问题的答案。有一个,但它有点被埋没了(我猜这个会是这样!)
大多数建议的功能如下所示:
function capitalizeFirstLetter(str) {
return str[0].toUpperCase() + str.slice(1);
}
但是,一些大小写字符不在 BMP(基本多语言平面,代码点 U+0 到 U+FFFF)之外。例如,以这个 Deseret 文本为例:
capitalizeFirstLetter(""); // ""
这里的第一个字符没有大写,因为字符串的数组索引属性不访问“字符”或代码点*。他们访问 UTF-16 代码单元。切片时也是如此——索引值指向代码单元。
碰巧 UTF-16 代码单元是 1:1,USV 代码点在两个范围内,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("") // ""
您可以使用按位数学代替> 0xFFFF
那里,但这种方式可能更容易理解,并且两者都可以实现相同的目标。
我们也可以在 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,从不开始一个词 (afaik),但仍然有助于说明问题。小写的 eszett (“ß”) 大写为“SS”,但“SS”可以小写为“ß”或“ss”——您需要德语的带外知识才能知道哪个是正确的!
这类问题最著名的例子可能是土耳其语。在土耳其拉丁语中,i 的大写形式是 İ,而 I 的小写形式是 ı——它们是两个不同的字母。幸运的是,我们确实有办法解决这个问题:
function capitalizeFirstLetter([ first, ...rest ], locale) {
return [ first.toLocaleUpperCase(locale), ...rest ].join('');
}
capitalizeFirstLetter("italy", "en") // "Italy"
capitalizeFirstLetter("italya", "tr") // "İtalya"
在浏览器中,用户最喜欢的语言标记由 表示navigator.language
,按偏好顺序排列的列表位于navigator.languages
,并且(通常)可以Object(element.closest('[lang]')).lang || YOUR_DEFAULT_HERE
在多语言文档中获得给定 DOM 元素的语言。
在支持 ES2018 中引入的 RegExp 中的 Unicode 属性字符类的代理中,我们可以通过直接表达我们感兴趣的字符来进一步清理内容:
function capitalizeFirstLetter(str, locale=navigator.language) {
return str.replace(/^\p{CWU}/u, char => char.toLocaleUpperCase(locale));
}
这可以稍微调整一下,以处理字符串中多个单词的大写,并具有相当好的准确性。CWU
或Changes_When_Uppercased字符属性匹配所有代码点,这些代码点在大写时会发生变化。我们可以用像荷兰语ij这样的带标题的二合字母来试试这个,例如:
capitalizeFirstLetter('ijsselmeer'); // "IJsselmeer"
截至 2021 年 1 月,所有主要引擎都实现了 Unicode 属性字符类功能,但根据您的目标支持范围,您可能还无法安全使用它。最后一个引入支持的浏览器是 Firefox(78;2020 年 6 月 30 日)。您可以使用Kangax 兼容表检查此功能的支持。Babel 可用于编译带有属性引用的 RegExp 文字到没有它们的等效模式,但请注意,生成的代码有时可能会很大。除非您确定权衡对于您的用例是合理的,否则您可能不想这样做。
问这个问题的人很可能不会关心 Deseret 的大写或国际化。但是,了解这些问题是件好事,因为即使它们目前不是问题,您最终也很有可能会遇到它们。它们不是“边缘”案例,或者更确切地说,它们不是按定义定义的边缘案例——无论如何,在整个国家,大多数人都说土耳其语,并且将代码单元与代码点混为一谈是一个相当常见的错误来源(尤其是与关于表情符号)。字符串和语言都非常复杂!
* UTF-16 / UCS2 的代码单元在某种意义上也是 Unicode 代码点,例如 U+D800 在技术上是一个代码点,但这不是它在这里的“含义”......有点......虽然它变得很漂亮模糊。但是,代理绝对不是 USV(Unicode 标量值)。
** 虽然如果代理代码单元是“孤立的”——即,不是逻辑对的一部分——你仍然可以在这里获得代理。
*** 也许。我没有测试过。除非你已经确定大写是一个有意义的瓶颈,否则我可能不会担心——选择你认为最清晰易读的任何内容。
**** 这样的函数可能希望同时测试第一个和第二个代码单元,而不仅仅是第一个,因为第一个单元可能是孤立的代理。例如,输入“\uD800x”将按原样大写 X,这可能是预期的,也可能不是预期的。
对于另一种情况,我需要将第一个字母大写,其余字母小写。以下情况使我更改了此功能:
//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 ECMAScript 6+ 解决方案:
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
如果您已经(或正在考虑)使用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 JavaScript:
function upperCaseFirst(str){
return str.charAt(0).toUpperCase() + str.substring(1);
}
将字符串中所有单词的首字母大写:
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(" ");
}
如果仅在网页上显示时需要转换:
p::first-letter {
text-transform: uppercase;
}
::first-letter
",但它适用于第一个字符,即在 string 的情况下%a
,此选择器将适用于%
并且因此a
不会大写。:first-letter
)。const capitalizeFirstChar = str => str.charAt(0).toUpperCase() + str.substring(1);
string.charAt(0)
在我执行的基准测试中,和之间没有显着差异string[0]
。但是请注意,这string[0]
将是undefined
一个空字符串,因此必须重写该函数以使用“ string && string[0]
”,与替代方法相比,这太冗长了。string.substring(1)
比 快string.slice(1)
。substring()
和之间的基准slice()
现在的差异相当小(自己运行测试):
substring()
,slice()
。有一个非常简单的方法来实现它replace。对于 ECMAScript 6:
'foo'.replace(/^./, str => str.toUpperCase())
结果:
'Foo'
最好先用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'
capitalizeTxt('dezfoolian'); // return 'Dezfoolian'
如果您想一遍又一遍地重用它,最好将它附加到javascript原生字符串,如下所示:
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'
String.prototype.capitalize = function(allWords) {
return (allWords) ? // If all words
this.split(' ').map(word => word.capitalize()).join(' ') : // Break down the phrase to words and then recursive
// calls until capitalizing all words
this.charAt(0).toUpperCase() + this.slice(1); // If allWords is undefined, capitalize only the first word,
// meaning the first character 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 character which is capitalized by
// the `toUpperCase()` method
).join('') // Return back to string
然后capitalize("hello") // Hello
我们可以用我最喜欢的一个角色来获得第一个角色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();
});
};
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
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
通过调用大写firstLetter.toUpperCase()
并将其与字符串的其余部分连接起来,这可以通过调用找到str.substr(1)
。
您可能认为这对于空字符串会失败,实际上在像 C 这样的语言中,您必须满足这一点。然而在 JavaScript 中,当你取一个空字符串的子字符串时,你只会得到一个空字符串。
利用:
var str = "ruby java";
console.log(str.charAt(0).toUpperCase() + str.substring(1));
它将输出"Ruby java"
到控制台。
如果您使用Underscore.js或Lodash,underscore.string库提供字符串扩展,包括大写:
_.capitalize(string) 将字符串的第一个字母转换为大写。
例子:
_.capitalize("foo bar") == "Foo bar"
如果您可以将每个单词的首字母大写,并且您的用例是 HTML,则可以使用以下 CSS:
<style type="text/css">
p.capitalize {text-transform:capitalize;}
</style>
<p class="capitalize">This is some text.</p>
这是来自CSS text-transform 属性(在W3Schools中)。
var capitalized = yourstring[0].toUpperCase() + yourstring.substr(1);
如果您想重新格式化全大写文本,您可能需要修改其他示例:
function capitalize (text) {
return text.charAt(0).toUpperCase() + text.slice(1).toLowerCase();
}
这将确保更改以下文本:
TEST => Test
This Is A TeST => This is a test
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'
String.prototype.capitalize = function(){
return this.replace(/(^|\s)([a-z])/g,
function(m, p1, p2) {
return p1 + p2.toUpperCase();
});
};
用法:
capitalizedString = someString.capitalize();
这是一个文本字符串 => 这是一个文本字符串
yourString.replace(/\w/, c => c.toUpperCase())
我发现这个箭头功能最简单。Replace匹配字符串的第一个字母字符 ( \w
) 并将其转换为大写。没有什么更花哨的了。
var str = "test string";
str = str.substring(0,1).toUpperCase() + str.substring(1);
这个问题有57 81 个不同的答案,有些离题,但没有一个提出重要问题,即列出的解决方案都不适用于亚洲字符、表情符号和许多浏览器中的其他高 Unicode 点值字符。这是一个解决方案,它将:
const consistantCapitalizeFirstLetter = "\uD852\uDF62".length === 1 ?
function(S) {
"use-strict"; // Hooray! The browser uses UTF-32!
return S.charAt(0).toUpperCase() + S.substring(1);
} : function(S) {
"use-strict";
// The browser is using UCS16 to store UTF-16
var code = S.charCodeAt(0)|0;
return (
code >= 0xD800 && code <= 0xDBFF ? // Detect surrogate pair
S.slice(0,2).toUpperCase() + S.substring(2) :
S.charAt(0).toUpperCase() + S.substring(1)
);
};
const prettyCapitalizeFirstLetter = "\uD852\uDF62".length === 1 ?
function(S) {
"use-strict"; // Hooray! The browser uses UTF-32!
return S.charAt(0).toLocaleUpperCase() + S.substring(1);
} : function(S) {
"use-strict";
// The browser is using UCS16 to store UTF-16
var code = S.charCodeAt(0)|0;
return (
code >= 0xD800 && code <= 0xDBFF ? // Detect surrogate pair
S.slice(0,2).toLocaleUpperCase() + S.substring(2) :
S.charAt(0).toLocaleUpperCase() + S.substring(1)
);
};
请注意,上述解决方案尝试考虑 UTF-32。但是,该规范正式声明,浏览器必须执行映射到 UCS2 的 UTF-16 中的所有操作。尽管如此,如果我们齐心协力,尽自己的一份力量,开始为 UTF32 做准备,那么 TC39 就有可能允许浏览器开始使用 UTF-32(就像 Python 如何为字符串的每个字符使用 24 位一样) . 这对讲英语的人来说一定很愚蠢:没有人只使用 latin-1 曾经不得不处理Mojibake因为所有字符编码都支持 Latin-I。但是,其他国家(如中国、日本、印度尼西亚等)的用户就没那么幸运了。他们一直在为编码问题而苦苦挣扎,不仅来自网页,还来自 JavaScript:许多中文/日文字符被 JavaScript 视为两个字母,因此可能会在中间分开,从而导致 � 和 �(两个问号这对最终用户没有意义)。如果我们可以开始为 UTF-32 做好准备,那么 TC39 可能只会允许浏览器做 Python 多年前所做的事情,这使得 Python 在处理高 Unicode 字符方面非常流行:使用 UTF-32。
consistantCapitalizeFirstLetter
在Internet Explorer 3+中正常工作(当const
更改为时var
)。需要 Internet Explorer 5.5+(请参阅本文档prettyCapitalizeFirstLetter
第 250 页的顶部)。然而,这些事实更多地只是玩笑,因为您网页上的其余代码很可能甚至无法在Internet Explorer 8中运行- 因为所有 DOM 和 JScript 错误以及这些旧浏览器中缺乏功能。此外,没有人再使用 Internet Explorer 3 或 Internet Explorer 5.5。
看看这个解决方案:
var stringVal = 'master';
stringVal.replace(/^./, stringVal[0].toUpperCase()); // Returns Master
只是因为这真的是一个单行,所以我将包括这个答案。这是一个基于ES6的内插字符串单线。
let setStringName = 'the Eiffel Tower';
setStringName = `${setStringName[0].toUpperCase()}${setStringName.substring(1)}`;
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)
这是我的版本。我认为它也很容易理解和优雅。
var str = "foo bar baz";
// Capitalize
str.split(' ')
.map(w => w[0].toUpperCase() + w.substr(1).toLowerCase())
.join(' ')
// Returns "Foo Bar Baz"
// Capitalize the first letter
str.charAt(0).toUpperCase() + str.slice(1)
// Returns "Foo bar baz"
功能性方法
const capitalize = ([s, ...tring]) =>
[s.toUpperCase(), ...tring]
.join('');
那么你可以
const titleCase = str =>
str
.split(' ')
.map(capitalize)
.join(' ')
每个字符串的第一个字符都大写。
function capitalize(word){
return word[0].toUpperCase() + word.slice(1).toLowerCase();
}
console.log(capitalize("john")); //John
console.log(capitalize("BRAVO")); //Bravo
console.log(capitalize("BLAne")); //Blane
带箭头功能
let fLCapital = s => s.replace(/./, c => c.toUpperCase())
fLCapital('this is a test') // "This is a test"
带箭头功能,另一种解决方案
let fLCapital = s => s = s.charAt(0).toUpperCase() + s.slice(1);
fLCapital('this is a test') // "This is a test"
带数组和 map()
let names = ['james', 'robert', 'mary']
let makeFNLCapital = names.map(name => name.replace(/./, c => c.toUpperCase()))
makeFNLCapital // ["James", "Robert", "Mary"]
已经有很多好的答案了,但你也可以使用简单的 CSS 转换:
text-transform: capitalize;
div.c {
text-transform: capitalize;
}
<h2>text-transform: capitalize:</h2>
<div class="c">Lorem ipsum dolor sit amet, consectetur adipiscing elit.</div>
ucfirst = (str) -> str.charAt(0).toUpperCase() + str.slice(1)
作为 String 原型方法:
String::capitalize = -> @charAt(0).toUpperCase() + @slice(1)
在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);
// Uppercase first letter
function ucfirst(field) {
field.value = field.value.substr(0, 1).toUpperCase() + field.value.substr(1);
}
用法:
<input type="text" onKeyup="ucfirst(this)" />
一种可能的解决方案:
function ConvertFirstCharacterToUpperCase(text) {
return text.substr(0, 1).toUpperCase() + text.substr(1);
}
用这个:
alert(ConvertFirstCharacterToUpperCase("this is string"));
这是工作的JS Fiddle
/*
* As terse as possible, assuming you're using ES version 6+
*/
var upLetter1=s=>s.replace(/./,m=>m.toUpperCase());
console.log(upLetter1("the quick brown fox jumped over the lazy dog."));
//\\ The quick brown fox jumped over the lazy dog. //\\
这个解决方案可能是新的,并且可能是最简单的。
function firstUpperCase(input)
{
return input[0].toUpperCase() + input.substr(1);
}
console.log(firstUpperCase("capitalize first letter"));
使用箭头函数:
const capitalize = string => string[0].toUpperCase() + string.slice(1)
这是我尝试创建一个通用函数,该函数只能大写第一个字母或每个单词的第一个字母,包括用破折号分隔的单词(如法语中的一些名字)。
默认情况下,该函数仅将第一个字母大写,其余部分保持不变。
参数:
if( typeof String.prototype.capitalize !== "function" ) {
String.prototype.capitalize = function( lc, all ) {
if( all ) {
return this.split( " " )
.map( currentValue => currentValue.capitalize( lc ), this )
.join( " " )
.split( "-" )
.map( currentValue => currentValue.capitalize( false ), this )
.join( "-" );
} else {
return lc
? this.charAt( 0 ).toUpperCase() + this.slice( 1 ).toLowerCase()
: this.charAt( 0 ).toUpperCase() + this.slice( 1 );
}
}
}
Or you could use Sugar.js capitalize()
Example:
'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();
}
有多种方法可以尝试以下方法
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());
这也将处理示例中提到的负面情况,例如以特殊字符开头的单词,例如!@#$%^&*()}{{[];':",.<>/?
.
a.slice(0,1).toUpperCase()+a.slice(1)
let a = 'hello',
fix = a.slice(0,1).toUpperCase()+a.slice(1)
console.log(fix)
使用当前语言功能:
function capitalize([firstLetter, ...rest]) {
return [firstLetter.toLocaleUpperCase(), ...rest].join('');
}
console.log(capitalize('foo bar'));
console.log(capitalize('ѷҥӕ'))
console.log(capitalize('❄⭐'));
// Title Case
console.log(
'Title Case:',
'foo bar'
.split(/\s+/)
.map(capitalize)
.join(' '),
);
我们接受一个解构的字符串作为唯一的参数[firstLetter, ...rest]
,将第一个字符分配给变量,并为绑定到变量firstLetter
的其余字符 () 获取一个数组。例如,对于字符串,它应该如下所示:...rest
rest
lorem ipsum
capitalize('lorem ipsum');
// firstLetter = 'l'
// rest = ['o', 'r', 'e', 'm', ' ', 'i', 'p', 's', 'u', 'm'];
现在我们需要做的就是在数组前面加上第一个字母的大写版本firstLetter.toLocaleUpperCase()
——rest
使用扩展运算符——然后使用.join('')
如果您选择其中一个正则表达式答案,请记住它们仅适用于 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() 方法似乎更容易。
您可以使用正则表达式方法:
str.replace(/(^|\s)\S/g, letter => letter.toUpperCase());
此代码还将处理字符串开头和结尾的额外空格。
let val = ' this is test ';
val = val.trim();
val = val.charAt(0).toUpperCase() + val.slice(1);
console.log("Value => ", val);
优雅的
const capitalize = ([firstChar, ...rest]) => `${firstChar.toUpperCase()}${rest.join('')}`;
var capitalizeMe = "string not starting with capital"
用 substr 大写
var capitalized = capitalizeMe.substr(0, 1).toUpperCase() + capitalizeMe.substr(1);
好的,所以我是 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……”;
我只会使用正则表达式:
myString = ' the quick green alligator...';
myString.trim().replace(/^\w/, (c) => c.toUpperCase());
仅将第一个字母大写并使字符串的其余部分小写:
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.");
结果将是:
这将全部大写。
一个小的改进 - 标题中的每个单词。
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!
最简单的解决方案是:
let yourSentence = 'it needs first letter upper case';
yourSentence.charAt(0).toUpperCase() + yourSentence.substr(1);
或者:
yourSentence.charAt(0).toUpperCase() + yourSentence.slice(1);
或者:
yourSentence.substr(0, 1).toUpperCase() + yourSentence.substr(1);
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'));
1.我们将使用 CSS 来实现这一点。它也可以从外部 CSS 设置。
<span text-transform="capitalize ">The first letter of each word becomes an upper case</span>
2.使用 vanilla JavaScript,我们可以:
let string = "test case"
string = string[0].toUpperCase() + string.substring(1)
//return "Test case"
说明</b/>:
string[0].toUpperCase()
: 将字符串中的第一个字母转换为大写
string.substring(1)
: 删除字符串中的第一个字母并返回剩余的字符
text-transform="capitalize"
: 将此标签中每个单词的首字母大写。如果你使用 'uppercase' 作为 text-transform 的值,标签中的每个字母都是大写字母
我一直在尝试使用 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());
}
});
当数据输入者连续输入时,这个函数实际上将第一个字母大写。
该函数有两个参数:
start - 开始索引;
length - 要大写的子字符串的长度
String.prototype.subUpper = function () {
var result = this.toString();
var start = 0;
var length = 1;
if (arguments.length > 0) {
start = arguments[0];
if (start < this.length) {
if (arguments.length > 1) {
length = arguments[1];
}
if (start + length > this.length) {
length = this.length - start;
}
var startRest = start + length;
var prefix = start > 0 ? this.substr(0, start) : String.empty;
var sub = this.substr(start, length);
var suffix = this.substr(startRest, this.length - startRest);
result = prefix + sub.toUpperCase() + suffix;
}
}
return result;
};
我在我的开发环境中使用了一些类似的东西,尤其是在使用像 HTTP 这样的 API 时:
假设您有一个 HTTP 标头,您希望将其名称中的每个首字母大写,并在其组成词之间添加连字符。您可以使用这个基本而简单的例程来实现类似的目标:
'access control allow origin'
.replace(/\b\w/g, function (match) {
return match.toUpperCase();
})
.split(' ')
.join('-');
// Output: 'Access-Control-Allow-Origin'
它可能不是最优雅和最吸引人的函数定义,但它确实可以完成工作。
只需安装并加载Lodash:
import { capitalize } from "lodash";
capitalize('test') // Test
喜欢它:
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!
这个很简单
const upper = lower.replace(/^\w/, c => c.toUpperCase());
一个衬里(“inputString 可以设置为任何字符串”):
inputString.replace(/.{1}/, inputString.charAt(0).toUpperCase())
单线:
'string'.replace(/(^[a-z])/,function (p) { return p.toUpperCase(); } )
你可以做到str.replace(str[0], str[0].toUpperCase())
。
检查这个例子:
let str = "hello, WORLD!"
let newStr = str.replace(str[0], str[0].toUpperCase())
console.log("str: ", str)
console.log("newStr: ", newStr)
首先,我只是想弄清楚在这种情况下大写的含义。“ T he S string I s C acapitalized ”可靠来源
您可以从示例中看到,前提是这不是 OP 想要的。它应该说的是“如何使字符串的第一个字母大写”(不大写字符串)
function ucfirst (str) {
return typeof str != "undefined" ? (str += '', str[0].toUpperCase() + str.substr(1)) : '';
}
解释
typeof str != "undefined" // Is str set
? // true
str += '' // Turns 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
''; // Returns an empty string
这将适用于任何参数或根本没有参数。
undefined === ""
"" === ""
"my string" === "My string"
null === "Null"
undefined === "";
false === "False"
0 === "0"
true === "True"
[] === ""
[true,0,"",false] === "True,0,,false"
任何类型的字符串都可以转换——
你的字符串 → 你的字符串
var str = yOuRsTrING.toLowerCase(); // Output: yourstring
str.charAt(0).toUpperCase() + str.slice(1); // Output: Y + ourstring = Yourstring
当前投票的答案是正确的,但它不会在第一个字符大写之前修剪或检查字符串的长度。
String.prototype.ucfirst = function(notrim) {
s = notrim ? this : this.replace(/(?:(?:^|\n)\s+|\s+(?:$|\n))/g,'').replace(/\s+/g,' ');
return s.length > 0 ? s.charAt(0).toUpperCase() + s.slice(1) : s;
}
设置 notrim 参数以防止首先修剪字符串:
'pizza'.ucfirst() => 'Pizza'
' pizza'.ucfirst() => 'Pizza'
' pizza'.ucfirst(true) => ' pizza'
这执行相同的操作:
var newStr = string.slice(0,1).toUpperCase() + string.slice(1);
我知道这是一个有很多答案的老问题,但这是我的快速片段。
const capitalize = (str) => str?.split('').map( (e, i) => i === 0 ? e.toUpperCase() : e ).join('')
第一个单词大写:最短
text.replace(/(^.)/, m => m.toUpperCase())
大写每个单词:最短
text.replace(/(^\w|\s\w)/g, m => m.toUpperCase());
如果要确保其余部分为小写:
text.replace(/(^\w|\s\w)(\S*)/g, (_,m1,m2) => m1.toUpperCase()+m2.toLowerCase())
This is what I use religiously:
function capitalizeMe(str, force){
str = force ? str.toLowerCase() : str;
return str.replace(/(\b)([a-zA-Z])/g,
function(firstLetter){
return firstLetter.toUpperCase();
});
}
var firstName = capitalizeMe($firstName.val());
验证首字母大写
function capitalizeFirstLetter(str) {
return (str && typeof str === 'string') ? (str.charAt(0).toUpperCase() + str.slice(1)) : "";
}
测试
console.log(capitalizeFirstLetter(0)); // Output: ""
console.log(capitalizeFirstLetter(null)); // Output: ""
console.log(capitalizeFirstLetter("test")); // Output: "Test"
console.log(capitalizeFirstLetter({})); // Output: ""
function cap(input) {
return input.replace(/[\.\r\n\t\:\;\?\!]\W*(\w)/g, function(match, capture) {
// For other sentences in the text
return match.toUpperCase();
}).replace(/^\W*\w/, function(match, capture) {
// For the first sentence in the text
return match.toUpperCase();
});;
}
var a = "hi, dear user. it is a simple test. see you later!\r\nbye";
console.log(cap(a));
// Output: Hi, dear user. It is a simple test. See you later!
// Bye
该方法将获取一个值,然后将其拆分为一个字符串数组。
const firstLetterToUpperCase = value => {
return value.replace(
value.split("")["0"], // Split stirng and get the first letter
value
.split("")
["0"].toString()
.toUpperCase() // Split string and get the first letter to replace it with an uppercase value
);
};
然而,仅仅因为你可以,并不意味着你应该。它需要 ECMAScript 6,因为代码使用数组解构。
const capitalizeFirstLetter = s => {
const type = typeof s;
if (type !== "string") {
throw new Error(`Expected string, instead received ${type}`);
}
const [firstChar, ...remainingChars] = s;
return [firstChar.toUpperCase(), ...remainingChars].join("");
};
使用 RamdaJs 的另一种方式,函数式编程方式:
firstCapital(str){
const fn = p => R.toUpper(R.head(p)) + R.tail(p);
return fn(str);
}
字符串中有多个单词:
firstCapitalAllWords(str){
const fn = p => R.toUpper(R.head(p)) + R.tail(p);
return R.map(fn,R.split(' ', str)).join(' ');
}
这是更好更干净的版本;
var str = '';
return str.replace(new RegExp('^'+str[0]+''), str[0].toUpperCase());
结果:
这是一个测试 --> 这是一个测试
你应该这样做:
let text = "lower case";
text = text.charAt(0).toUpperCase() + text.substring(1, text.length);
如果需要所有单词都以大写字母开头,可以使用以下函数:
const capitalLetters = (s) => {
return s.trim().split(" ").map(i => i[0].toUpperCase() + i.substr(1)).reduce((ac, i) => `${ac} ${i}`);
}
例子:
console.log(`result: ${capitalLetters("this is a test")}`)
// Result: "This Is A Test"
如果Lodash
您的项目中有,请使用upperFirst
.
我更喜欢使用面向功能方式的解决方案(例如映射数组):
Array.from(str).map((letter, i) => i === 0 ? letter.toUpperCase() : letter ).join('');
使用 Node.js 的这个模块,http ://stringjs.com/包,将您的字符串大写:
var S = require('string');
S('jon').capitalize().s; //'Jon'
S('JP').capitalize().s; //'Jp'
这将容忍可能的前导空格,并且不会错过字符串中第一个字母的目标。因此,它可能会改进线程上已经很好的解决方案。
str = " the Eifel Tower";
str.replace(/\w/, str.match(/\w/)[0].toUpperCase());
>> " The Eifel Tower";
!但是,如果对空白字符串执行,将导致“软”错误。为了避免这种可能的错误或对空白字符串或数字的不必要处理,可以使用三元条件保护:
+str!=+str ? str.replace(/\w/, str.match(/\w/)[0].toUpperCase()) : str;
尝试使用以下功能:
function capitalize (string) {
return [].map.call(string, (char, i) => i ? char : char.toUpperCase()).join('')
}
用法:
capitalize('hello, world!')
结果:
Hello, world!
好吧,如果方法传递了一些意外类型的数据,例如Object
or ,所有的答案都会崩溃function
。
因此,为了确保它不会在任何情况下崩溃,我们需要检查类型。
capitalizeFirstLetter = string => {
if (typeof string == "string") {
console.log("passed");
return string.charAt(0).toUpperCase() + string.slice(1);
} else {
console.log("error");
return string;
}
};
//type function
console.log(
capitalizeFirstLetter(() => {
return true;
})
);
// error
// () => { return true; }
//type object
console.log(capitalizeFirstLetter({ x: 1 }));
// error
// Object { x: 1 }
//type boolean
console.log(capitalizeFirstLetter(true));
// error
// true
//type undefined
console.log(capitalizeFirstLetter(undefined));
// error
// undefined
//type null
console.log(capitalizeFirstLetter(null));
// error
// null
//type NaN
console.log(capitalizeFirstLetter(NaN));
// error
// NaN
//type number
console.log(capitalizeFirstLetter(2));
// error
// 2
//type any for e.g. class
class Jaydeep {}
console.log(capitalizeFirstLetter(new Jaydeep()));
// error
// Object {}
//type string
console.log(capitalizeFirstLetter("1"));
console.log(capitalizeFirstLetter("a"));
console.log(capitalizeFirstLetter("@"));
console.log(capitalizeFirstLetter(""));
// 1
// A
// @
// :empty string
你可以这样做:
mode = "string";
string = mode.charAt(0).toUpperCase() + mode.substr(1,mode.length).toLowerCase();
console.log(string);
这将打印
String
var a = "this is a test"
console.log(a.replace(/^[a-z]/g, txt => txt.toUpperCase()));
试试这个代码:
alert("hello".substr(0, 1).toUpperCase() + "hello".substr(1));
它采用“hello”中的第一个字符,将其大写并添加其余部分。
string = string.replace(string.charAt(0), string.charAt(0).toUpperCase());
如果您想将字符串中的每个第一个字母大写,例如hello to the world
变为Hello To The World
您可以使用以下内容(来自 Steve Harrison):
function capitalizeEveryFirstLetter(string) {
var splitStr = string.split(' ')
var fullStr = '';
$.each(splitStr,function(index){
var currentSplit = splitStr[index].charAt(0).toUpperCase() + splitStr[index].slice(1);
fullStr += currentSplit + " "
});
return fullStr;
}
您可以使用以下方式调用它:
capitalizeFirstLetter("hello to the world");
对于打字稿
capitalizeFirstLetter(string) {
return string.charAt(0).toUpperCase() + string.slice(1);
}
您可以使用如下正则表达式:
return string1.toLowerCase().replace(/^[a-zA-z]|\s(.)/ig, L => L.toUpperCase());
“这是一个测试”→“这是一个测试”
var word = "this is a test"
word[0].toUpperCase();
它会给出:“这是一个测试”
“这是一个测试”→“这是一个测试”
function capitalize(str) {
const word = [];
for(let char of str.split(' ')){
word.push(char[0].toUpperCase() + char.slice(1))
}
return word.join(' ');
}
capitalize("this is a test");
它会给出:“这是一个测试”
将字符串中所有单词的首字母大写:
function capitalize(str) {
return str.split(' ').map(word => word.charAt(0).toUpperCase() + word.toLowerCase().slice(1)).join(' ');
}
const capitalizeName = function (name) {
const names = name.split(' ');
const namesUpper = [];
for (const n of names) {
namesUpper.push(n.replace(n[0], n[0].toUpperCase()));
}
console.log(namesUpper.join(' '));
};
capitalizeName('the Eiffel Tower')
这是我使用的功能:
capitalCase(text: string = 'NA') {
return text
.trim()
.toLowerCase()
.replace(/\w\S*/g, (w) => w.replace(/^\w/, (c) => c.toUpperCase()));
}
console.log('this cApitalize TEXt');
您可以使用正则表达式解决它:
return str.toLowerCase().replace(/^[a-zA-z]|\s(.)/ig, L => L.toUpperCase());
要包括的功能:
/** First Character uppercase */
function capitalize(str) {
return str.charAt(0).toUpperCase() + str.slice(1);
}
/** First Character lowercase */
function uncapitalize(str) {
return str.charAt(0).toLowerCase() + str.slice(1);
}
示例 1“第一个字符大写”:
alert(capitalize("hello world"));
结果:你好世界
示例 2“第一个字符小写”:
alert(uncapitalize("Hello World, today is sunny"));
结果:你好世界,今天是晴天
我尝试了不同的方法
function myFun(val) {
var combain='';
for (let i = 0; i < val.length; i++) {
combain += val[i].charAt(0).toUpperCase() + val[i].substring(1, val[i].length)+'-';
}
return combain.replaceAll('-',' ');
}
var str = 'sreehari_bsn_alli'.replaceAll('_', ' ');
str = str.split(' ');
let op = myFun(str);
控制台.log(操作);
我最近在一个项目中需要一个类似的功能,这就是我实现它的方式:
function capitlizeFirst(str) {
// checks for null, undefined and empty string
if (!str) return;
return str.match("^[a-z]") ? str.charAt(0).toUpperCase() + str.substring(1) : str;
}
console.log(capitlizeFirst(""));
console.log(capitlizeFirst(null));
console.log(capitlizeFirst(undefined));
console.log(capitlizeFirst("hello world"));
console.log(capitlizeFirst("/index.html"));
当我们说大写时,它意味着每个单词中的第一个字母应该大写,后面的字符小写。
下面有两个函数,第一个函数将字符串的第一个字母变成大写,后面是小写。第二个函数将字符串转换为标题大小写,这意味着每个单词中的每个第一个字母都是大写的
// Will make will first letter of a sentence or word uppercase
function capital(word){
word = word.toLowerCase()
return word[0].toUpperCase() + word.substring(1);
}
// Will make first letter in each words capital
function titleCase(title) {
title = title.toLowerCase();
const words = title.split(' ');
const titleCaseWords = words.map((word) => word[0].toUpperCase() + word.substring(1));
return titleCaseWords.join(' ');
}
const title = titleCase('the QUICK brown fox')
const caps = capital('the QUICK brown fox')
console.log(title); // The Quick Brown Fox
console.log(caps); // The quick brown fox
十分简单:
// 好的,同意,这里是编辑后的版本。我不能再简单了。
function FirstUpperCase(inputString){
return inputString.replace(inputString[0],inputString[0].toUpperCase());
};
输入:你好学生 输出:你好学生
如果我可以稍微修改一下代码。我发现如果我通过这个函数运行一个全大写字符串,什么都不会发生。所以……这是我的小事。首先强制字符串小写。
String.prototype.capitalize = function(){
return this.toLowerCase().replace( /(^|\s)([a-z])/g , function(m, p1, p2) {
return p1 + p2.toUpperCase();
});
}