在字符串中大写单词

时间:2010-02-25 09:12:14

标签: javascript string capitalization

将字符串中的单词大写的最佳方法是什么?

21 个答案:

答案 0 :(得分:207)

String.prototype.capitalize = function() {
    return this.replace(/(?:^|\s)\S/g, function(a) { return a.toUpperCase(); });
};

<强>用法:

'your string'.capitalize(); // -> 'Your String'

  • 修复了Marco Demaio的解决方案,其中前面有空格的第一个字母没有大写。

    ' javascript'.capitalize(); // -> ' Javascript'
    
  • 可以处理国家符号和重音字母。

    'бабушка курит трубку'.capitalize();  // -> 'Бабушка Курит Трубку'
    'località àtilacol'.capitalize()      // -> 'Località Àtilacol'
    

ADD-ON 我发现它很有用

String.prototype.capitalize = function(lower) {
    return (lower ? this.toLowerCase() : this).replace(/(?:^|\s)\S/g, function(a) { return a.toUpperCase(); });
};
'javaSCrIPT'.capitalize();      // -> 'JavaSCrIPT'
'javaSCrIPT'.capitalize(true);  // -> 'Javascript'

答案 1 :(得分:197)

使用ES6的箭头函数,在字符串中大写单词的最短实现如下:

'your string'.replace(/\b\w/g, l => l.toUpperCase())
// => 'Your String'

ES5兼容实施:

'your string'.replace(/\b\w/g, function(l){ return l.toUpperCase() })
// => 'Your String'

正则表达式基本匹配给定字符串中每个单词的第一个字母,并仅将该字母转换为大写:

  • \b匹配单词边界(单词的开头或结尾);
  • \w匹配以下元字符[a-zA-Z0-9]。

对于非ASCII字符,请参阅此解决方案

'ÿöur striñg'.replace(/(^|\s)\S/g, l => l.toUpperCase())

此正则表达式匹配给定字符串中的第一个字母和前面有空格的每个非空格字母,并仅将该字母转换为大写:

  • \s匹配空格字符
  • \S匹配非空白字符
  • (x|y)匹配任何指定的替代方案

此处可以使用非捕获组,如下所示/(?:^|\s)\S/g,但我们正则表达式中的g标志无论如何都不会按设计捕获子组。

干杯!

答案 2 :(得分:28)

function capitalize(s){
    return s.toLowerCase().replace( /\b./g, function(a){ return a.toUpperCase(); } );
};

capitalize('this IS THE wOrst string eVeR');

输出:“这是最糟糕的字符串”

更新

这个解决方案似乎取代了我的:https://stackoverflow.com/a/7592235/104380

答案 3 :(得分:15)

只要您在输入字符串中没有重音字母,answer provided by vsync就会

我不知道原因,但显然regexp中的\b也匹配重音字母(在IE8和Chrome上测试过),因此像 "località"这样的字符串会被错误地大写转换进入"LocalitÀ" à字母变为大写,因为正则表达式认为它是一个单词边界)

也可以使用重音字母的更通用的功能就是这个:

String.prototype.toCapitalize = function()
{ 
   return this.toLowerCase().replace(/^.|\s\S/g, function(a) { return a.toUpperCase(); });
}

你可以像这样使用它:

alert( "hello località".toCapitalize() );

答案 4 :(得分:4)

使用JavaScript和HTML

String.prototype.capitalize = function() {
  return this.replace(/(^|\s)([a-z])/g, function(m, p1, p2) {
    return p1 + p2.toUpperCase();
  });
};
<form name="form1" method="post">
  <input name="instring" type="text" value="this is the text string" size="30">
  <input type="button" name="Capitalize" value="Capitalize >>" onclick="form1.outstring.value=form1.instring.value.capitalize();">
  <input name="outstring" type="text" value="" size="30">
</form>

基本上,您可以执行string.capitalize()并将每个单词的每个第一个字母大写。

来源:http://www.mediacollege.com/internet/javascript/text/case-capitalize.html

答案 5 :(得分:4)

由于每个人都已经向您提供了您所要求的JavaScript答案,因此我将提到CSS属性text-transform: capitalize将完成此操作。

我意识到可能不是你所要求的 - 你没有给我们任何你正在运行它的背景 - 但如果只是为了演示,我' d肯定会选择CSS替代方案。

答案 6 :(得分:4)

John Resig(jQuery成名)将John Gruber编写的perl脚本移植到JavaScript。这个脚本以更智能的方式利用它,例如,它不会像'of'和'and'这样的小词大写。

您可以在此处找到它:Title Capitalization in JavaScript

答案 7 :(得分:3)

如果您在JavaScript应用程序中使用 lodash ,则可以使用_.capitalize

console.log( _.capitalize('ÿöur striñg') );
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>

答案 8 :(得分:1)

我的解决方案:

String.prototype.toCapital = function () {
    return this.toLowerCase().split(' ').map(function (i) {
        if (i.length > 2) {
            return i.charAt(0).toUpperCase() + i.substr(1);
        } else {
            return i;
        }
    }).join(' ');
};

示例:

'álL riGht'.toCapital();
// Returns 'Áll Right'

答案 9 :(得分:1)

这应该涵盖大多数基本用例。

const capitalize = (str) => {
    if (typeof str !== 'string') {
      throw Error('Feed me string')
    } else if (!str) {
      return ''
    } else {
      return str
        .split(' ')
        .map(s => {
            if (s.length == 1 ) {
                return s.toUpperCase()
            } else {
                const firstLetter = s.split('')[0].toUpperCase()
                const restOfStr = s.substr(1, s.length).toLowerCase()
                return firstLetter + restOfStr
            }     
        })
        .join(' ')
    }
}


capitalize('THIS IS A BOOK') // => This Is A Book
capitalize('this is a book') // => This Is A Book
capitalize('a 2nd 5 hour boOk thIs weEk') // => A 2nd 5 Hour Book This Week

编辑:提高了映射的可读性。

答案 10 :(得分:1)

一种简洁的ES6方法可能看起来像这样。

const capitalizeFirstLetter = s => s.charAt(0).toUpperCase() + s.slice(1)

这只会大写 第一个字母 ,而不会影响句子其余部分的大小写。

答案 11 :(得分:0)

我喜欢简单的过程。首先将字符串更改为数组以便于迭代,然后使用地图函数根据需要更改每个单词。

function capitalizeCase(str) {
    var arr = str.split(' ');
    var t;
    var newt;
    var newarr = arr.map(function(d){
        t = d.split('');
        newt = t.map(function(d, i){
                  if(i === 0) {
                     return d.toUpperCase();
                    }
                 return d.toLowerCase();
               });
        return newt.join('');
      });
    var s = newarr.join(' ');
    return s;
  }

答案 12 :(得分:0)

我将为此使用正则表达式:

myString = '  this Is my sTring.  ';
myString.trim().toLowerCase().replace(/\w\S*/g, (w) => (w.replace(/^\w/, (c) => c.toUpperCase())));

答案 13 :(得分:0)

还有locutus:https://locutus.io/php/strings/ucwords/,它是这样定义的:

function ucwords(str) {
  //  discuss at: http://locutus.io/php/ucwords/
  // original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
  // improved by: Waldo Malqui Silva (http://waldo.malqui.info)
  // improved by: Robin
  // improved by: Kevin van Zonneveld (http://kvz.io)
  // bugfixed by: Onno Marsman (https://twitter.com/onnomarsman)
  // bugfixed by: Cetvertacov Alexandr (https://github.com/cetver)
  //    input by: James (http://www.james-bell.co.uk/)
  //   example 1: ucwords('kevin van  zonneveld')
  //   returns 1: 'Kevin Van  Zonneveld'
  //   example 2: ucwords('HELLO WORLD')
  //   returns 2: 'HELLO WORLD'
  //   example 3: ucwords('у мэри был маленький ягненок и она его очень любила')
  //   returns 3: 'У Мэри Был Маленький Ягненок И Она Его Очень Любила'
  //   example 4: ucwords('τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός')
  //   returns 4: 'Τάχιστη Αλώπηξ Βαφής Ψημένη Γη, Δρασκελίζει Υπέρ Νωθρού Κυνός'

  return (str + '').replace(/^(.)|\s+(.)/g, function ($1) {
    return $1.toUpperCase();
  });
};

答案 14 :(得分:0)

Ivo的答案很好,但是我不想在\w上匹配,因为不需要大写0-9和A-Z。我们可以忽略这些内容,而仅在a-z上进行匹配。

'your string'.replace(/\b[a-z]/g, match => match.toUpperCase())
// => 'Your String'

这是相同的输出,但是我认为在自记录代码方面更加清晰。

答案 15 :(得分:0)

此解决方案不使用正则表达式,支持带重音符号的字符,并且几乎每个浏览器都支持。

function capitalizeIt(str) {
    if (str && typeof(str) === "string") {
        str = str.split(" ");    
        for (var i = 0, x = str.length; i < x; i++) {
            if (str[i]) {
                str[i] = str[i][0].toUpperCase() + str[i].substr(1);
            }
        }
        return str.join(" ");
    } else {
        return str;
    }
}    

用法:

  

console.log(capitalizeIt('çaoJavaScript内部第二程序'));

输出:

  

Çao第二个内部Javascript程序

答案 16 :(得分:0)

您可以使用以下命令将字符串中的单词大写:

SELECT ID, ID DIV 600 as grp
FROM Table1

答案 17 :(得分:0)

使用此:

String.prototype.toTitleCase = function() {
  return this.charAt(0).toUpperCase() + this.slice(1);
}

let str = 'text';
document.querySelector('#demo').innerText = str.toTitleCase();
<div class = "app">
  <p id = "demo"></p>
</div>

答案 18 :(得分:0)

Jquery或Javascipt没有提供实现此目的的内置方法。

CSS测试转换(text-transform:capitalize;)并没有真正大写字符串的数据,但在屏幕上显示大写的渲染。

如果您正在寻找使用普通vanillaJS在数据级别实现此更合法的方法,请使用此解决方案=&gt;

var capitalizeString = function (word) {    
    word = word.toLowerCase();
    if (word.indexOf(" ") != -1) { // passed param contains 1 + words
        word = word.replace(/\s/g, "--");
        var result = $.camelCase("-" + word);
        return result.replace(/-/g, " ");
    } else {
    return $.camelCase("-" + word);
    }
}

答案 19 :(得分:0)

此代码大写点后的单词:

function capitalizeAfterPeriod(input) { 
    var text = '';
    var str = $(input).val();
    text = convert(str.toLowerCase().split('. ')).join('. ');
    var textoFormatado = convert(text.split('.')).join('.');
    $(input).val(textoFormatado);
}

function convert(str) {
   for(var i = 0; i < str.length; i++){
      str[i] = str[i].split('');
      if (str[i][0] !== undefined) {
         str[i][0] = str[i][0].toUpperCase();
      }
      str[i] = str[i].join('');
   }
   return str;
}

答案 20 :(得分:0)

http://www.mediacollege.com/internet/javascript/text/case-capitalize.html是众多答案之一。

Google可以满足您的所有需求。

一种天真的方法是用空格分割字符串,将结果数组的每个元素的第一个字母大写并将它连接在一起。这样就留下了现有的大写(例如,HTML保持HTML并且不会像Html那样变得愚蠢)。如果您不想要这种影响,请在拆分之前将整个字符串转换为小写。