5240

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

例如:

  • “这是一个测试”“这是一个测试”
  • “埃菲尔铁塔”“埃菲尔铁塔”
  • “/index.html”“/index.html”
  • 21
    强调有一个名为下芯管柱这包括这个和其他一些很棒的工具。
    – 亚伦
    2013年4月15日19:16
  • 4
    对于使用角形的管道,有一个标题框管道: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]=大写+splittedEnter[i].substr(1).toLowerCase();}return splittedEnter.join(“”);}大写(“tHiS将全部大写”);

结果是:

这将全部资本化。

0
5

只需安装并加载洛达什以下为:

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

最简单的解决方案是:

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

或:

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

或:

yourSentence.subtr(0,1).toUpperCase()+yourSencence.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','\udc69','‍', '\ud83d','\udc67','-','ந', 'ி', '-', '깍', '-', '葛', '\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_graphemeSplit';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=string.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 text transform=“capitalize”>每个单词的第一个字母变为大写</span>

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

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

解释</b/>:

字符串[0].toUpperCase():将字符串中的第一个字母转换为大写

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

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

0

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

你的梦想你的名字

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].to UpperCase()+p.substr(1).to LowerCase()});}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

你能做到的str.replace(str[0],str[0].toUpperCase())

检查此示例:

let str=“hello WORLD”让newStr=str.replace(str[0],str[0].toUpperCase())console.log(“str:”,str)console.log(“newStr:”,newStr)

0
2

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

$(“#FirstNameField”).on(“keydown”,函数(e){var str=$(“#FirstNameField”).val();if(str.substring()===str.substrang(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''披萨'.ucfirst(true)=>'披萨'
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结果=this.toString();var启动=0;var长度=1;if(arguments.length>0){start=参数[0];if(开始<this.length){if(arguments.length>1){长度=参数[1];}如果(起始+长度>此长度){长度=this.length-开始;}var startRest=开始+长度;var前缀=开始>0?this.substr(0,开始):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
2

要将所有单词大写:

打字版本:

常量大写=(str:string)=>{//拆分为单词const words=str.split(“”);const resWords:string[]=[];//循环单词,切分每个单词的第一个字母并将其大写。words.forEach(单词=>{const letterOne=单词切片(0,1);const upperCaseLetterOne=letterOne.toUpperCase();const otherLetters=word.slice(1);const newWord=upperCaseLetterOne+otherLettersresWords.push(newWord)});//将其转换回可读字符串。return resWords.join(“”);}

Javascript版本:

常量大写=(str)=>{//拆分为单词const words=str.split(“”);const resWords=[];//循环单词,切分每个单词的第一个字母并将其大写。words.forEach(单词=>{const letterOne=单词切片(0,1);const upperCaseLetterOne=letterOne.toUpperCase();const otherLetters=word.slice(1);const newWord=upperCaseLetterOne+otherLettersresWords.push(newWord)});//将其转换回人类可读的字符串。return resWords.join(“”);}

你可以这样使用它:

const bookTitle=“我的好书”;const displayBookTitle=大写(bookTitle);console.log(displayBookTitle)//我的好书

大写第一个单词:

打字:

常量大写=(str:string)=>{return str.charAt(0).toUpperCase()+str.slice(1)}

Java脚本:

常量大写=(str)=>{return str.charAt(0).toUpperCase()+str.slice(1);}

你这样使用它:

console.log(大写(“foo bar”))//foo bar
1
  • 注意,对于某些语言来说,这可能不起作用。我写它是为了用英语工作,所以你可能需要修改它,使之适用于你的目标语言。 2023年3月14日18:08
2

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

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

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