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


当前回答

Jquery或Javascipt没有提供内置方法来实现这一点。

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

如果您正在使用普通的香草ajs在数据级别上寻找一种更合法的方法来实现这一点,请使用这个解决方案=>

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);
    }
}

其他回答

一个简单,直接(非正则)的解决方案:

const capitalizeFirstLetter = s => 
  s.split(' ').map(w => w.charAt(0).toUpperCase() + w.slice(1)).join(' ')

将字符串拆分为单词数组(使用空格分隔符) 将每个单词分成第一个字符+单词中的其余字符 第一个字母转换为大写字母,其余字母保持原样 将数组连接回带有空格的字符串

如果你在你的JavaScript应用程序中使用lodash,你可以使用_.capitalize:

控制台日志(_。查理兹(你的字符串); <剧本剧本src = " https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js " > < / >

还有loctus: 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();
  });
};

只要输入字符串中没有重音字母,vsync提供的答案就可以工作。

我不知道原因,但显然\b在regexp匹配也重音字母(在IE8和Chrome上测试),所以像“località”这样的字符串会被错误地大写转换为“LocalitÀ”(à字母被大写,因为regexp认为这是一个单词边界)

一个更通用的函数也适用于重音字母是这样的:

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

你可以这样使用它:

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

你可以使用以下方法将字符串中的单词大写:

function capitalizeAll(str){

    var partes = str.split(' ');

    var nuevoStr = ""; 

    for(i=0; i<partes.length; i++){
    nuevoStr += " "+partes[i].toLowerCase().replace(/\b\w/g, l => l.toUpperCase()).trim(); 
    }    

    return nuevoStr;

}