5308

如果字符串的第一个字符是一个字母,如何使其大写,但不改变其他任何字母的大小写?

例如:

  • “这是一个测试”“这是一次测试”
  • “埃菲尔铁塔”“埃菲尔铁塔”
  • “/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个答案106

重置为默认值
7

此代码还将处理字符串开始和结束处的额外空格。

let val=“这是测试”;val=val.trim();val=val.charAt(0).toUpperCase()+val.slice(1);console.log(“Value=>”,val);

6

如果只将第一个字母大写,并将字符串的其余部分小写:

函数大写(str){var splittedEnter=str.split(“”);var资本化;var capitalizedResult;for(var i=0;i<splittedEnter.length;i++){capitalized=拆分Enter[i].charAt(0).toUpperCase();splittedEnter[i]=大写+拆分Enter[i].substr(1).toLowerCase();}return splittedEnter.join(“”);}大写(“tHiS将全部大写”);

结果是:

这将全部资本化。

0
6

这是一个简单的方法。

函数大写(单词){return word.substring(0,1).toUpperCase()+word.substring(1).toLowerCase(;}

您可以创建一个以单词字符串作为输入的函数。您可以使用Substring类来提供字符串的第一个字符至UpperCase()将该字符大写。

然后将字符串的其余部分连接到字符串减去应用至下壳体()方法。

通常,您将使用两个值subString(子字符串)类。字符串拼接的起始位置和结束位置,但如果只为subString(子字符串)中的类将从该值拼接到字符串的末尾(就像我们在第二种情况下得到的一样),并记住subString(子字符串)类是零索引的。

5

只需安装并加载洛达什:

从“lodash”导入{大写};大写(“测试”)//测试
4

最简单的解决方案是:

let yourSentence=“它需要首字母大写”;yourSentence.charAt(0).toUpperCase()+yourSencence.substr(1);

或:

yourSentence.charAt(0).toUpperCase()+yourSencence.slice(1);

或:

yourSentent.substr(0,1).to UpperCase()+yourSentent.substr(1);
1
  • 是的,很简单。这可能就是为什么在你回答之前的十年里,它已经被贴了好几次了。
    – 米肯32
    评论 2023年2月9日18:35
4

带有模板字符串的简单ES6语法

常量大写=(str)=>{返回`${str[0].toUpperCase()}${str.slice(1)}`//return str[0].toUpperCase()+str.slice(1)//不带模板字符串}console.log(大写(“这是一个测试”);console.log(大写(“艾菲尔铁塔”);console.log(大写(“/index.html”));/*“这是一次测试”→“这是一次测试”“埃菲尔铁塔”→“艾菲尔铁楼”“/index.html”→“/index.html”*/

4

我没有看到其他答案提到国际分段器,它“支持区域设置敏感的文本分割”,这意味着在处理由多个代码点组成的字符时,可以可靠地识别第一个字符。在浏览器中依赖它的最大警告是缺乏Firefox支持,请参阅https://caniuse.com/mdn-javascript_builtins_intl_segmenter_segment网站&https://bugzilla.mozilla.org/show_bug.cgi?id=1423593.

请参见如何从字符串中获取字符数组?了解更多详细信息。

这里已经有很多很好的答案,所以我将只关注按字符拆分。

使用以下测试字符串,该字符串由9个字符/15个代码点/20个代码单元组成:

常量str='🐅-👨‍👩‍👧-நி-깍-葛󠄀';

天真、分裂

str.split(“”);//(20)[“\ud83d”,“\udc05','-','\ud83d',''\udc68','','\ud83d'ந', 'ி', '-', '깍', '-', '葛', '\udb40','\udd00']

稍微好一点,传播运营商

[…字符串]// (15) ["🐅", '-', '👨', '‍', '👩', '‍', '👧', '-', 'ந', 'ி', '-', '깍', '-', '葛', '󠄀']

国际分段器(在支持的浏览器中)

[…new Intl.Segmenter().segment(str)].map((g)=>g.segment);// (9) ["🐅", '-', '👨‍👩‍👧', '-', 'நி', '-', '깍', '-', '葛󠄀']

绘图仪1.4.0

从“Graphemer”导入Graphemer;const splitter=新图示器();splitter.split图表(str);// (9) ["🐅", '-', '👨‍👩‍👧', '-', 'நி', '-', '깍', '-', '葛󠄀']

洛达什4.17.10

从“lodash”导入;_.split(str,“”);// (11) ["🐅", '-', '👨‍👩‍👧', '-', 'ந', 'ி', '-', '깍', '-', '葛', '󠄀']

织物.jsv6.0.0-beta10版graphemeSplit(内部函数)

从'导入{graphemeSplit}/fabric_graphme拆分';graphemeSplit(str);// (15) ["🐅", '-', '👨', '‍', '👩', '‍', '👧', '-', 'ந', 'ி', '-', '깍', '-', '葛', '󠄀']

@formatjs国际分段器11.4.2聚乙烯填料

等待导入(“@formatjs/intl-segmenter/polyfill-force”);[…new Intl.Segmenter().segment(str)].map((g)=>g.segment);// (9) ["🐅", '-', '👨‍👩‍👧', '-', 'நி', '-', '깍', '-', '葛󠄀']

可编辑比较:https://stackblitz.com/edit/stackblitez-typescript-lrag9u?devToolsHeight=90&file=index.ts

函数大写每个单词(str){return str.replace(/\w\S*/g,函数(txt){return txt.charAt(0).toUpperCase()+txt.substr(1).toLowerCase(;});}document.write(大写EachWord('foo BAR God bAD'));

0

喜欢它:

函数大写(字符串,a){var tempstr=字符串.toLowerCase();if(a==false || a==未定义)return tempstr.replace(tempstr[0],tempstr[0].toUpperCase());其他{return tempstr.split(“”).map(函数(i){return i[0].toUpperCase()+i.substring(1)}).join(“”);}}大写('堆栈溢出耶!',true)//堆栈溢出是的!大写('堆栈堆栈溢出耶!')//堆栈溢出耶!

https://jsfiddle.net/dgmLgv7b/

一条直线:

“string”.replace(/(^[a-z])/,函数(p){return p.toUpperCase();})

2
  • Oneliner?当然,效率极低?不,regex并不便宜。 评论 2016年2月4日21:08
  • 1
    我是说。。。这就像执行一个10行的任务,去掉换行符,然后称其为1行,就好像这是一种功能一样
    – 凯文·B
    评论 2023年2月8日21:50

这个很简单

const upper=lower.replace(/^\w/,c=>c.toUpperCase());

一行(“inputString可以设置为任何字符串”):

inputString.replace(/.{1}/,inputStreng.charAt(0).toUpperCase())
4
  • 1
    字符位于接受可选的数字索引作为参数,而不是模式。在这里使用RegEx的成本似乎不必要。此外,已经发布了正确的版本在这里.
    – 诺亚努
    评论 2018年1月30日19:52
  • 1
    @诺亚努有错别字,有很多方法可以解决同样的问题 评论 2018年1月30日22:21
  • 它之所以有效,是因为charAt参数被“净化”了。它来自/.{1}/->NaN公司->0。我所说的“正确”是指你刚刚编辑答案的版本。如果你按照我提供的链接,另一位用户已经在2015年发布了你的方法,这意味着你的答案没有添加任何内容。
    – 诺亚努
    评论 2018年1月30日22:27
  • @noahnu我最近发布了一个问题的解决方案或替代解决方案,早些时候我主要是这样问的。来自程序员同事的尊重。 评论 2018年1月31日23:24

我在我的开发环境中使用了一些类似的东西,尤其是在使用HTTP之类的API时:

假设您有一个HTTP头,其中您希望将名称中的每个首字母大写,并在其组成单词之间添加连字符。使用这个基本而简单的例程,您可能会实现这样的目标:

'访问控制允许来源'.replace(/\b\w/g,函数(匹配){return match.toUpperCase();}).split(“”).join('-');//输出:“Access-Control-Allow-Origin”

它可能不是最优雅、最吸引人的函数定义,但它确实完成了任务。

1我们将使用CSS来实现这一点。也可以从外部CSS进行设置。

每个单词的第一个字母变成大写</span>

2使用普通JavaScript,我们可以:

let string=“测试用例”string=字符串[0].toUpperCase()+字符串.substring(1)//return“测试用例”

解释</b/>:

string[0].to上一个案例():将字符串中的第一个字母转换为大写

字符串.子字符串(1):删除字符串中的第一个字母并返回其余字符

text-transform=“大写”:将此标记中每个单词的首字母大写。如果使用“大写”作为文本转换的值,则标记中的每个字母都将是大写字母

0

任何类型的字符串都可以转换--

YoUrStRiNg→你的故事

var str=yOuRsTrING.toLowerCase();//输出:yourstringstr.charAt(0).toUpperCase()+str.slice(1);//输出:Y+ourstring=您的第一个字符串

首先,我只是想弄清楚大写在这种情况下意味着什么。"T型他的S公司字符串C类资本化”可靠的来源

从示例中可以看出,这不是OP想要的。它应该说的是“如何使字符串的第一个字母大写”(不大写字符串)

函数ucfirst(str){str!=的返回类型“未定义”?(str+=“”,str[0].toUpperCase()+str.substr(1)):“”;}

解释

str!=的类型“undefined”//是否设置str? // 真实的str+=''//将字符串变量转换为字符串str[0].toUpperCase()//获取第一个字符并使其大写+//添加str.substr(1)//从索引1开始的字符串(从0开始)://假''; // 返回空字符串

这将适用于任何论证或根本没有论证。

未定义===“”""                === ""“my string”===“我的字符串”null===“空”未定义===“”;false===“假”0                 === "0"true===“真”[]                === ""[true,0,“”,false]===“真,0,,假”

一个小小的改进——标题中的每个单词。

String.prototype.toTitleCase=函数(){return this.replace(/\b(\w+)/g,函数(m,p){return p[0].toUpperCase()+p.substr(1).toLowerCase(()});}var s='heLLo,wOrLD!';console.log(s.toTitleCase());//你好,世界!
2
  • 请编辑更多信息。不鼓励只使用代码和“尝试此操作”的答案,因为它们不包含可搜索的内容,也没有解释为什么有人应该“尝试此项操作”。 评论 2016年8月30日9:22
  • 一个小的改进-完全按照问题要求我不要做的做🫠
    – 米肯32
    评论 2023年2月9日18:32

在某些情况下,此代码可能工作良好:

函数大写FirstLetter(字符串){return string.charAt(0).toUpperCase()+string.slice(1);}console.log(大写首字母('foo'));////但如果我们这样做,效果就不好了console.log(大写首字母('fOo'));//FOo公司

但是如果你真的想确保只有第一个字母大写,其余的都是小写字母,你可以这样调整代码:

函数大写FirstLetter(字符串){return string.charAt(0).toUpperCase()+string.slice(1).toLowerCase(;}console.log(大写首字母('fOo'));//

1
  • 这个问题特别指出“但不改变任何其他字母的大小写”
    – 米肯32
    评论 2023年2月7日19:17

包括这个答案,因为这是一个使用扩散运算符的单行答案。没有其他答案那么好。但仍然可以在不修改原始字符串的情况下完成工作。

const[firstLetter,…rest]=“hello world”;console.log(`${firstLetter.toUpperCase()}${rest.join('')}`);

1
  • 您的解决方案仍然需要两个表达式。要使这句话成为真正的一句话,它必须是这样的console.log(([firstLetter,…rest]=“hello world”,`${firstLeter.toUpperCase()}${rest.join(')}`). 评论 2023年6月30日14:18

您可以在JavaScript中实现这一点,方法是将字符串拆分为单词数组,将第一个单词的第一个字母大写,然后将单词重新连接到字符串中

函数大写首字母(str){str=str.charAt(0).toUpperCase()+str.slice(1);//将单词连接回字符串返回str;}

//示例用法:

console.log(大写FirstLetter(“这是一个测试”);//输出:“这是一个测试”console.log(大写首字母(“埃菲尔铁塔”);//输出:《埃菲尔铁塔》console.log(大写FirstLetter(“/index.html”));//输出:“/index.html”

此函数大写首字母将字符串作为输入,使用空格字符作为分隔符将其拆分为一个单词数组,将第一个单词的第一个字母大写,然后将这些单词重新连接到一个带空格的字符串中。

1
  • 如果没有相关性,你为什么要分裂成单词?s.charAt(0).toUpperCase()+s.slice(1)工作原理相同,不需要额外的CPU周期和内存来创建基本上没有使用的阵列。 评论 4月5日14:03
2

我一直在尝试使用jQuery进行同样的操作(即在输入字符串时将其第一个字母大写)。我在网上搜索了所有答案,但都找不到。然而,我可以使用打开()jQuery中的函数如下:

$(“#FirstNameField”).on(“keydown”,函数(e){var str=$(“#FirstNameField”).val();if(str.substring()==str.substring(0,1)){$(“#FirstNameField”).val(str.substring(0,1).toUpperCase());} });

当数据输入者连续输入时,此函数实际上会将第一个字母大写。

2

这将执行相同的操作:

var newStr=字符串切片(0,1).toUpperCase()+字符串切片(1);
2
  • 这难道不会导致“埃菲尔铁塔”变成“埃菲尔塔”吗?最初涉及的问题改变其他字母的大小写。 评论 2016年3月28日20:12
  • 是的,@AndrewMyers,我做了编辑,不会改变其他信件的大小写 评论 2016年3月30日15:10
2

好的,所以我对JavaScript是新手。我没能让以上这些为我工作。所以我开始自己动手。以下是我的想法(关于相同、不同和有效的语法):

字符串名称=request.getParameter(“name”);name=name.toUpperCase().charAt(0)+name.substring(1);out.println(名称);

这里我从表单中获取变量(它也可以手动工作):

String name=“我是一个Smartypants…”;name=name.toUpperCase().charAt(0)+name.substring(1);out.println(名称);

输出:“我是一个聪明人…”;

1
  • 注:此答案是为Java语言而不是JavaScript。 评论 2023年2月8日6:54
2

如果有洛达什在项目中,使用upperFirst(大写首字母).

2

当前投票的答案是正确的,但它不会在大写第一个字符之前修剪或检查字符串的长度。

String.prototype.ucfirst=函数(notrim){s=无边缘?this:this.replace(/(?:(?:^|\n)\s+|\s+(?:$|\n))/g,'')。replace(/\s+/g,'');返回s.length>0?s.charAt(0).toUpperCase()+s.slice(1):s;}

设置notrim参数以防止首先修剪字符串:

'pizza'.ucfirst()=>'pizza''pizza'.ucfirst()=>'pizza''pizza'.ucfirst(true)=>“pizza”
2
  • 你的意思是什么“当前投票的答案”? 你是说“当前投票最多的答案”? 评论 2019年6月13日23:14
  • @彼得·莫滕森:对不起,我在2015年回答了这个问题,我想我指的是公认的答案,但我记不得了。请随意更改/更正。 评论 2019年6月14日22:43
2

首字母大写:最短

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(
1
  • 1
    与其他实现相比,这是一个更正确的实现。例如,如果您想要:evence coppéeplaats公司埃文斯·科佩帕茨,您的方法工作正常,而其他人则会对é. 评论 2022年8月25日9:52
2

首字母大写并验证

函数大写首字母(str){return(str&&typeofstr==='string')?(str.charAt(0).toUpperCase()+str.slice(1)):“”;}

测试

console.log(大写首字母(0));//输出:“”console.log(大写首字母(null));//输出:“”console.log(大写首字母(“test”));//输出:“测试”console.log(大写首字母({}));//输出:“”
2

该函数有两个参数:

开始-开始索引;
length-要大写的子字符串的长度

String.prototype.subUpper=函数(){var result=this.toString();var启动=0;var长度=1;if(arguments.length>0){start=参数[0];if(开始<this.length){if(arguments.length>1){长度=参数[1];}if(开始+长度>this.length){长度=this.length-开始;}var startRest=开始+长度;var前缀=开始>0?this.substr(0,start):String.empty;var sub=this.substr(开始,长度);var后缀=this.substr(startRest,this.length-startRes);结果=前缀+sub.toUpperCase()+后缀;}}返回结果;};
1
  • 当其他人都更优雅、更简单时,为什么要有这么大的解决方案? 评论 2015年6月11日12:20
2

我知道这是一个有很多答案的老问题,但这里是我的简短片段。

常量大写=(str)=>str?。split('').map((e,i)=>i==0?e.toUpperCase():e).join(“”)
1
2

的解决方案无法读取未定义的属性“charAt”

常量大写=(字符串)=>{返回字符串?string.charAt(0).toUpperCase()+string.slice(1):“”;}console.log(大写(“我是程序员”);//我是一名程序员
1
  • 1
    防止这种情况并使其更具类型安全性的更好方法是(string=“”)=>string.charAt(0),因为它允许您始终使用字符串,并且如果不提供任何内容,只会返回空字符串。 评论 2023年11月15日9:19

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.