“这是一个测试” → “这是一个测试” “埃菲尔铁塔” → “埃菲尔铁塔” “/index.html” → “/index.html”
-
21 强调 有一个名为 下芯管柱 这包括这个和其他一些很棒的工具。 – 亚伦 评论 2013年4月15日19:16 -
5 对于使用角形的管道,有一个标题框管道: angular.io/api/common/TitleCase管道 – 埃斯特里玛 评论 2021年1月27日20:54 -
三 对于那些不知道堆栈溢出是如何工作的人:解决建议作为“答案”发布到页面上。 任何未解决的建议、澄清请求和单独/相关超链接都可以作为问题下的评论发布。 – 米克马库萨 评论 2021年6月16日23:17
106个答案
函数大写FirstLetter(字符串){ return string.charAt(0).toUpperCase()+string.slice(1); }
-
6 下面是TypeScript中的解决方案,其中返回的类型是大写的单词,而不是 一串 : 常量大写=<T extends string>(s:T)=>(s[0].toUpperCase()+s.slice(1))作为大写<typeof s>; – 丹·特洛 评论 2023年3月27日17:56 -
三 下面的答案中提到了这一点,但值得在这里指出:这个答案并不适用于所有Unicode文本。 将“𐐨𐑍\66 639;”传递给此函数将返回相同的字符串,但它应该返回“𐐀\ 66637\66 639;”。这是因为 字符位于 在UTF16代码单元处进行拆分。 SMP中有一些带有case-folding定义的字符,它们使用两个UTF16代码单元进行编码。 虽然很简单,但不应该使用。 评论 2023年9月28日7:34 -
4 -
1 -
1
Object.defineProperty(String.prototype,'capitalize'{ value:函数(){ return this.charAt(0).toUpperCase()+this.slice(1); }, 可枚举:false });
“你好,世界!”.capitalie();
“你好,世界!”
-
82 @尼尔斯卢卡斯很公平。 它有可能打破JS未来的新增功能。 如果是只有你才会使用的代码,那也没那么糟糕——你只需更新代码并继续。这里真正的问题是,当你开始用这样的代码发布库时:你的代码会修改使用你的代码的每个库的内置行为。 结果是,如果您和另一个库作者都用自己的实现重写了相同的内置程序,那么您会在另一个库里的代码中(或最后加载的代码)创建bug,让用户调试大量不可修复的bug报告。 评论 2021年7月1日3:52 -
6 @aggregate1166877谢谢您的解释。 我完全同意你的观点,这种方法不是创建库的好方法,我也同意这种方法对项目来说很好。 希望人们会读到这篇文章,因为我认为这是一个很好的原创答案。 – 尼尔斯·卢卡斯 评论 2021年7月1日13:59 -
三 对不起,但没有,只是不要向基本类型添加任何函数。 扩展它们? constExtendedString=class extendsString{capitalie(){return this[0].toUpperCase()+this.slice(1)}}const s=new Extended字符串('hello')console.log(s.capitalite()) – 马蒂恩·谢弗 评论 2021年10月26日14:01 -
如果我添加这样的自定义函数,我的方法是为这些方法的名称添加唯一的作用域。 例如,如果您的项目名称是MyProject,那么它将是“hello world”.myProjectCapitalis()或其他类似的名称。 因此,如果外部发生变化,它不会与该名称冲突。 只需要确保范围在您的上下文中足够独特。 – 通过我们 评论 2023年11月7日12:48 -
1 @VLAZ,好吧,我错了。 您提出的使用Symbols的解决方案确实很适合。 let capitalieSym=Symbol('capitalize')String.prototype[capitalieSYM]=function(…){…}-这避免了由于Symbol如何工作而产生的潜在冲突。 然而,为了以后访问函数,必须保持全局引用以大写Sym,这也不理想。 在大多数情况下,考虑到警告,人们对上述原始答案都会满意。 虽然我对Symbols了解不多,但由于你的评论,我学到了一些新东西。 – 通过我们 评论 2023年11月8日9:34
函数大写 { return s[0].toUpperCase()+s.slice(1); }
更新
更新2:
函数大写 { return s&&s[0].toUpperCase()+s.slice(1); }
ES6版本
常量大写=s=>s&&s[0].toUpperCase()+s.slice(1) //当s可能是空字符串以外的错误字符串时,始终返回类型字符串事件 常量大写=s=>(s&&s[0].toUpperCase()+s.slice(1))||“”
如果您对发布的几个不同方法的性能感兴趣:
//10889187次操作/秒 函数大写FirstLetter(字符串){ 返回字符串[0].toUpperCase()+string.slice(1); } //10875535次操作/秒 函数大写FirstLetter(字符串){ return string.charAt(0).toUpperCase()+string.slice(1); } //4632536次操作/秒 函数大写FirstLetter(字符串){ return string.replace(/^./,string[0].toUpperCase()); } //1977828次操作/秒 String.prototype.capitalizeFirstLetter=函数(){ return this.charAt(0).toUpperCase()+this.slice(1); }
隐藏问题概述及其各种解决方法
函数大写首字母(str){ return str[0].toUpperCase()+str.slice(1); }
大写首字母(“ 𐐶𐐲𐑌𐐼𐐲𐑉 "); // " 𐐶𐐲𐑌𐐼𐐲𐑉 "
函数大写FirstLetter([first='',…rest]){ return[first.toUpperCase(),…rest].join(''); } 大写首字母(“ 𐐶𐐲𐑌𐐼𐐲𐑉 ") // " 𐐎𐐲𐑌𐐼𐐲𐑉 "
函数大写首字母(str){ if(!str)返回“”; const firstCodePoint=str.codePointAt(0); const index=firstCodePoint>0xFFFF? 2 : 1; return String.fromCodePoint(firstCodePoint).toUpperCase()+str.slice(index); } 大写首字母(“ 𐐶𐐲𐑌𐐼𐐲𐑉 ") // " 𐐎𐐲𐑌𐐼𐐲𐑉 "
函数大写首字母(str){ if(!str)返回“”; var firstCodeUnit=str[0]; if(firstCodeUnit<'\uD800'||firstCode Unit>'\uDFFF'){ return str[0].toUpperCase()+str.slice(1); } return str.slice(0,2).toUpperCase()+str.slices(2); } 大写首字母(“ 𐐶𐐲𐑌𐐼𐐲𐑉 ") // " 𐐎𐐲𐑌𐐼𐐲𐑉 "
深入国际化( 谁的 资本化?)
函数大写FirstLetter([first='',…rest],语言环境){ return[first.toLocaleUpperCase(locale),…rest].join(''); } 大写首字母(“意大利”,“en”)//“意大利” 大写首字母(“italya”,“tr”)//“伊塔利亚”
函数capitalieFirstLetter(str,locale=navigator.language){ return str.replace(/^\p{CWU}/u,char=>char.toLocaleUpperCase(语言环境)); }
JS中case-mapping的替代方案(Firefox和CSS喜欢荷兰!)
大写首字母(“ijsselmeer”);// “塞尔米尔”
大写首字母('ijselmeer','nl');// “Ijsselmeer”:(
<! DOCTYPE html> <dl> <dt>未转换 伊斯塞尔梅尔 <dt>以CSS和<code>lang=en大写 ijsselmeer公司 <dt>以CSS和<code>lang=nl大写 ijsselmeer公司
-
我一直在想为什么 将字符串转换成大写 对某些语言没有太大帮助。。。 但并没有太在意去发现。 很高兴我终于做到了,这是一本非常有趣的书! 评论 2021年7月19日22:09 -
这似乎不适用于荷兰语中的“IJ”等双连字符。 使用最新版本时,此处的示例错误地大写为“Ijsselmeer”(正则表达式版本)。 我使用的代码是: 大写首字母('ijssel','nl-nl') -这是一个正确的本地化字符串,对吗? – 保罗23 评论 2021年8月24日11:38 -
三 -
三 -
2 @GéryOgam知道您试图用链接的答案中的第二个正则表达式做什么的正式术语“分段”可能会有所帮助。 分割是复杂的,在某些情况下,其行为也因语言而异。 它由UAC#29定义。 幸运的是,ECMAScript(通过ECMA-402,即Intl API)为此提供了一个API,即%Intl.Segmenter%。 你会用 粒度:“word” . – 分号 评论 7月23日19:19
//电子系统5 函数大写(字符串){ return string.charAt(0).toUpperCase()+string.slice(1).toLowerCase(; } 大写(“alfredo”)//=>“alfredo“ 大写(“Alejandro”)//=>“Alejandero 大写(“ALBERTO”)//=>“ALBERTO” 大写(“ArMaNdO”)//=>“ArMaNdO” //es6使用破坏 const capitalie=([first,…rest])=>first.toUpperCase()+rest.join(“”).toLowerBase();
_.upperFirst(“红色”); //=>“弗雷德” _.upperFirst(“FRED”); //=>“FRED” _.大写('fred')//=>'fred'
_.lowerFirst(“弗雷德”); //=>“弗雷德” _.lowerFirst(“FRED”); //=>“fRED” _.snakeCase(“Foo Bar”); //=>“foo_bar”
函数upperCaseFirst(str){ return str.charAt(0).toUpperCase()+str.substring(1); }
const str=“埃菲尔铁塔”; const newStr=`${str[0].toUpperCase()}${str.slice(1)}`; console.log('原始字符串:',str);// 埃菲尔铁塔 console.log('新字符串:',newStr);// 埃菲尔铁塔
“foo”.replace(/^./,str=>str.toUpperCase())
“Foo”
-
-
9 -
这样可以避免声明 一串 变量(大多数其他答案都假设有)。 例如: const date=new date(“2024-08-12”).toLocaleDateString(“fr-fr”,{weekday:“long”,year:“numeric”,month:“lond”,day:”numeric“}).replace(/^./,str=>str.toUpperCase()); 。使用字符串串联解决方案需要首先将区域设置日期字符串放入变量中(或者更糟糕,重复完整的日期方法)。 – 罗宾·梅特拉尔 评论 8月12日10:52
仅CSS
p: :第一个字母{ text-transform:大写; }
尽管被称为“ ::第一个字母 “,它适用于第一个 性格 ,即在字符串的情况下 %一个 ,此选择器将应用于 % 因此 一 不会被资本化。 在IE9+或IE5.5+中,只支持使用一个冒号的传统表示法( :第一个字母 ).
ES2015单线
常量大写FirstChar=str=>str.charAt(0).toUpperCase()+str.substring(1);
评论
在我执行的基准测试中 string.charAt(0) 和 字符串[0] 然而,请注意 字符串[0] 将是 未定义 对于空字符串,因此必须重写函数才能使用“ string&&string[0] “,与替代方案相比,这太冗长了。 字符串.子字符串(1) 比…快 string.slice(1) .
基准介于 子字符串()
和 切片()
21580613.15操作/秒±1.6% 子字符串() , 21096394.34操作/秒±1.8%( 慢2.24% )的 切片() .
-
2 实际上,您不想在ES6中使用加号(+)作为串联方法。 您需要使用模板文字: eslint.org/docs/rules/prefer-template网站 – 斯特林伯恩 评论 2018年3月19日15:37 -
2
函数ucFirstAllWords(str) { var pieces=str.split(“”); for(var i=0;i<件长度;i++) { var j=件[i].charAt(0).toUpperCase(); 件[i]=j+件[i]。子(1); } 返回件。连接(“”); }
.第一个字母大写:第一个字母{ 文本转换:大写; }
函数大写文本(txt){ return txt.charAt(0).toUpperCase()+txt.slice(1)// 或者如果您想将其余的txt.slice(1).toLowerCase()小写; }
capitaleText('这是一个测试');// return“这是一个测试” capitaleText(“埃菲尔铁塔”);// return“埃菲尔铁塔” 大写文本('/index.html');// 返回'/index.html' 大写文本('alireza');// return“Alireza” 大写文本('dezfulian');// return'Dezfoulian'
String.prototype.capitalizeTxt=String.prototype.capitalizeTxt||函数(){ return this.charAt(0).toUpperCase()+this.slice(1); }
'这是一个测试'.capitalieTxt();// return“这是一个测试” “埃菲尔铁塔”.capitaleTxt();// return“埃菲尔铁塔” '/index.html'.capitalieTxt();// 返回'/index.html' “alireza”.capitalieTxt();// return“Alireza”
String.prototype.capitalize=函数(allWords){ return(allWords)?// 如果所有单词 this.split(“”).map(word=>word.capitalie()).join(“””)://将短语分解为单词,然后递归 //调用直到所有单词大写 this.charAt(0).toUpperCase()+this.slice(1);// 如果所有单词未定义,则只将第一个单词大写, //表示整个字符串的第一个字符 }
“只大写第一个单词”.capitalie();==> “仅将第一个单词大写” “大写所有单词”。大写(true);==> “将所有单词大写”
2016年11月更新(ES6),仅用于 乐趣 :
const capitale=(string='')=>[…string].map(//每个项转换为数组的字符为 //字符串,使用扩展运算符(…) (字符,索引)=>索引? char:char.toUpperCase()//Index true表示不等于0,因此(!Index)为 //大写的第一个字符 //“toUpperCase()”方法 ).join(“”)//返回字符串
-
6 我认为这是一个糟糕的解决方案,原因有二:修改原语的原型是一个坏主意。 如果规范发生变化,他们决定选择“大写”作为新的原型属性名称,那么您就破坏了核心语言功能。 此外,所选方法名称也很差。 乍一看,我认为这将大写整个字符串。使用更具描述性的名称,如PHP的ucFirst或类似名称可能是一个更好的主意。 – 花花公子 评论 2017年2月22日1:08 -
另一个ES6答案更简单: const capitalie=([first,…rest])=>first.toUpperCase()+rest.join(“”).toLowerBase(); . – 丹·达斯卡列斯库 评论 2019年6月22日5:50 -
1
s&&s[0].toUpperCase()+s.slice(1)//32字符 s&&s.replace(/./,s[0].toUpperCase())//36字符-使用regexp 'foo'.replace(/./,x=>x.toUpperCase())//31 char-字符串上的直接字符,ES6
让s=“oo bar”; 控制台.log(s&&s[0].toUpperCase()+s.slice(1)); console.log(s&&s.replace(/./,s[0].toUpperCase())); console.log(“foo bar”.replace(/./,x=>x.toUpperCase()));
String.prototype.capitalize=函数(){ 返回this.replace(/^./,函数(match){ return match.toUpperCase(); }); };
字符串::大写=-> @替换/^./, (匹配)-> match.toUpperCase()
var大写=函数(输入){ 返回input.replace(/^./,函数(match){ return match.toUpperCase(); }); };
函数ucfirst(str){ var firstLetter=str.substr(0,1); return firstLetter.toUpperCase()+str.substr(1); }
ucfirst(“这是一个测试”)-->“这是测试”
<style type=“text/css”> p.大写{text-transform:大写;} </style> 这是一些文本</ p>(第页)
-
30 -
10 Adam说的没错,但我想95%以上的Javascript都是与HTML和CSS一起使用的。 不幸的是,“大写”语句实际上是大写的 每个字 ,所以您仍然需要JS来仅大写字符串的第一个字母。 – 西蒙·E。 评论 2012年1月21日4:24 -
19 -
86 -
6
var str=“ruby java”; console.log(str.charAt(0).toUpperCase()+str.substring(1));
函数大写(文本){ return text.charAt(0).toUpperCase()+text.sice(1).toLowerCase(); }
测试=>测试 这是测试=>这是测试
函数大写{ //返回首字母大写+来自索引1和out aka的字符串。 绳子的其余部分 return s[0].toUpperCase()+s.substr(1); } //示例 大写(“这是一个测试”); =>“这是一个测试” 大写(“埃菲尔铁塔”); =>“埃菲尔铁塔” 大写('/index.html'); =>“/index.html”
yourString.replace(/\w/,c=>c.toUpperCase())
-
5 这应该是公认的答案,而这几乎是自SO不断奖励过时问题以来的最后一次。 顺便说一句,最好用 /./ 有两个原因: /\w个/ 将跳过前面所有的非字母字符(因此@@abc将变为@@abc),然后它不适用于非拉丁字符 评论 2019年4月29日18:01 -
这是一个好答案! 有一个小小的警告: \w匹配基本拉丁字母中的任何字母数字字符,包括下划线。 所以替换一个单词,比如 _老板 将屈服 _老板 (来自 developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/… ) – 埃尔班·吉 评论 2022年5月5日17:25 -
String.prototype.capitalize=函数(){ 返回this.replace(/(^|\s)([a-z])/g, 函数(m,p1,p2){ 将p1+p2.返回到UpperCase(); }); };
capitaliedString=someString.capitalie();
-
-
-
-
1 String.prototype.capitalize=函数(){return this.replace(/(^|\s)[a-z]/g,函数(m){retain m.toUpperCase();}); 我稍微重构了一下您的代码,您只需要第一个匹配项。 – IGRACH公司 评论 2014年4月28日16:29 -
适用于所有Unicode字符的解决方案
const consistantCapitalizeFirstLetter=“\uD852\uDF62”.length===1? 功能(S){ “严格使用”;// 万岁! 浏览器使用UTF-32! 返回S.charAt(0).toUpperCase()+S.substring(1); }:函数(S){ “使用-价格”; //浏览器正在使用UCS16存储UTF-16 var代码=S.charCodeAt(0)|0; 返回( 代码>=0xD800&&代码<=0xDBFF?// 检测代理项对 S.slice(0,2).to UpperCase()+S.substring(2): S.charAt(0).toUpperCase()+S.substring(1) ); }; constprettyCapitalizeFirstLetter=“\uD852\uDF62”.length===1? 功能(S){ “严格使用”;// 万岁! 浏览器使用UTF-32! return S.charAt(0).toLocaleUpperCase()+S.substring(1); }:函数(S){ “使用-价格”; //浏览器正在使用UCS16存储UTF-16 var代码=S.charCodeAt(0)|0; 返回( 代码>=0xD800&&代码<=0xDBFF?// 检测代理项对 S.slice(0,2).toLocaleUpperCase()+S.substring(2): S.charAt(0).toLocalUpperCase()+S.substring(1) ); };
-
2 很高兴看到提出这一问题的答案。 然而,我不相信有任何浏览器 字符串.fromCodePoint(65536).长度===1 将是真的。 ES字符串暴露其UTF16特性并不是特定于实现的行为——这是规范中定义良好的一部分,并且由于向后兼容而无法修复。 – 分号 评论 2018年12月26日10:48 -
三 关于:新的最终注释,WHATWG和联合使用UTF-8作为平台上所有文本交换的唯一“正确”编码。 这不会改变(这是一件好事)。 然而,ES问题与此不同,它是关于ES具有字符串抽象,在使用索引地址、string.prototype.length等时,内部“utf-16+lone surrotates”编码的代码单元(既不是utf-16也不是UCS2)“breakthrough”(1/2) – 分号 评论 2019年4月25日20:54 -
1 负责ES的机构是TC39,而不是W3C(或WHATWG等),他们不能更改现有功能,因为这会破坏web。 相反,他们可以引入行为正确的新功能。 他们已经开始这样做了——RegExp、String.prototype.codePointAt和String.proptotype[@@iterator]上的“u”标志为旧API提供了更安全的替代方案。 (2/2) – 分号 评论 2019年4月25日20:55 -
-
var stringVal='master'; stringVal.replace(/^./,stringVal[0].toUpperCase());// 返回主控形状
-
三 -
2 不应在不必要的地方使用Regex。 它效率极低,也不会使代码更简洁。 此外, 字符串值[0] 将是 未定义 对于空 字符串值 ,因此尝试访问属性 .to外壳上部() 会抛出错误。 – 普尔泽梅克 评论 2017年9月23日19:28
让fLCapital=s=>s.replace(/./,c=>c.toUpperCase()) fLCapital(“这是一个测试”)//“这是测试”
设fLCapital=s=>s=s.charAt(0).toUpperCase()+s.slice(1); fLCapital(“这是一个测试”)//“这是测试”
让namesCapital=names=>names.map(name=>name.replace(/./,c=>c.toUpperCase())) namesCapital(['james','robert','mary'])//[“james”,“robert”,“mary”]
文本转换:大写;
div.text大写{ 文本转换:大写; }
<h2>文本转换:大写:</h2> <div class=“text-capitalize”>Lorem ipsum dolor sit amet,consectetur adipiscing精英</ div(分频)>