Заглавные слова в строке


каков наилучший подход Для заглавной буквы слов в строке?

16 125

16 ответов:

самая короткая реализация для заглавных слов в строке-это следующее использование функций стрелки 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 флаг в нашем регулярном выражении не будет захватывать подгруппы по дизайну в любом случае.

Ура!

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

использование:

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

  • исправления Марко ДиМайо'S решение, где первая буква с пробелом перед не заглавными буквами.

    ' 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'
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

The ответ предоставлен vsync работает пока у вас нет акцентированных букв в строке ввода.

Я не знаю причины, но, видимо,\b в регулярных выражениях совпадают также акцентированные буквы (проверено на IE8 и Chrome), поэтому строка вроде "località" было бы ошибочно заглавными буквами преобразовано в "LocalitÀ" (the à буква получает заглавную, потому что регулярное выражение думает, что это граница слова)

более общего функция работает также с буквы это:

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

вы можете использовать его как это:

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

John Resig (of jQuery fame ) портировал скрипт perl, написанный Джоном Грубером, на JavaScript. Этот сценарий использует более интеллектуальный способ, он не использует маленькие слова, такие как " of " И "and", например.

вы можете найти его здесь: заглавные буквы в JavaScript

поскольку все дали вам ответ JavaScript, который вы просили, я добавлю, что свойство CSS text-transform: capitalize будет делать именно это.

Я понимаю, что это может не то, что вы просите - вы не дали нам ни одного контекста, в котором вы это запускаете, но если это просто для презентации, я бы определенно пошел с альтернативой CSS.

использование 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() и он будет заглавными буквами каждой 1-й буквы каждого слова.

Источник:http://www.mediacollege.com/internet/javascript/text/case-capitalize.html

Если вы используете лодашь в приложении JavaScript, вы можете использовать _.с большой буквы:

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

мое решение:

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'

Это должно охватывать большинство основных случаев использования.

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

Edit: улучшена читаемость отображения.

http://www.mediacollege.com/internet/javascript/text/case-capitalize.html - это один из многих ответов там.

Google может быть все, что вам нужно для таких задач.

наивным подходом было бы разделить строку пробелами, заглавными буквами первой буквы каждого элемента результирующего массива и соединить его вместе. Это оставляет существующую капитализацию в покое (например, HTML остается HTML и не становится чем-то глупым, как Html). Если ты не хочешь ... это влияет, поверните всю строку в нижний регистр перед ее разделением.

этот код заглавные слова после точки:

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

Мне нравится идти с легким процессом. Сначала измените строку в массив для легкой итерации, а затем с помощью функции map измените каждое слово так, как вы хотите.

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

Jquery или Javascipt не предоставляет встроенный метод для достижения этой цели.

CSS test transform (text-transform:capitalize;) на самом деле не капитализирует данные строки, но показывает капитализированный рендеринг на экране.

Если вы ищете более законный способ достижения этого на уровне данных с помощью простых vanillaJS, используйте это решение =>

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

Используйте Этот:

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>

вы можете использовать следующие заглавные слова в строке:

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;

}