Первая буква переменной в верхнем регистре

88

Я искал в Интернете, не могу найти ничего, что могло бы мне помочь. Я хочу сделать первую букву каждого слова заглавной в переменной.

Пока я пробовал:

toUpperCase();

И не повезло, так как все буквы заглавные.

Райан
источник
2
Посмотрите stackoverflow.com/questions/5086390/jquery-camelcase
пробел

Ответы:

227

Используйте функцию .replace[MDN], чтобы заменить строчные буквы, начинающиеся на слово, на прописную.

var str = "hello world";
str = str.toLowerCase().replace(/\b[a-z]/g, function(letter) {
    return letter.toUpperCase();
});
alert(str); //Displays "Hello World"


Изменить: если вы имеете дело со словесными символами, отличными от просто az, то следующее (более сложное) регулярное выражение может лучше соответствовать вашим целям.

var str = "петр данилович björn über ñaque αλφα";
str = str.toLowerCase().replace(/^[\u00C0-\u1FFF\u2C00-\uD7FF\w]|\s[\u00C0-\u1FFF\u2C00-\uD7FF\w]/g, function(letter) {
    return letter.toUpperCase();
});
alert(str); //Displays "Петр Данилович Björn Über Ñaque Αλφα"

Питер Олсон
источник
1
Это не работает с такими именами, как Björn Lüchinger, это становится BjöRn LüChinger. Что-нибудь исправить?
Дата обращения
2
@Dediqated Спасибо, что указали на это, дайте мне знать, поможет ли редактирование.
Питер Олсон
Работает отлично! Любые намеки на то, какой должна быть модификация, если я просто хотел преобразовать в верхний регистр первый символ строки? (вместо каждого слова)
Andres SK
6
@andufo Конечно, это сделать намного проще. Просто используйтеstr[0].toUpperCase() + str.slice(1)
Питер Олсон
@PeterOlson спасибо за ответ! Я закончил использовать var first = str.slice(0, str.indexOf(' ')); str = first.toLowerCase().replace(/^[\u00C0-\u1FFF\u2C00-\uD7FF\w]|\s[\u00C0-\u1FFF\u2C00-\uD7FF\w]/g, function(letter) { return letter.toUpperCase(); }) + str.substr(first.length);и специальные символы.
Andres SK
72

Намного более простой способ:

$('#test').css('textTransform', 'capitalize');

Я должен отдать должное @Dementic за то, что он направил меня по правильному пути. Намного проще, чем то, что вы предлагаете.

Vbullinger
источник
32
Это изменяет только визуальное представление строки, но не само значение строки.
toxaq
1
Вы не можете применить это к переменным, полученным из БД, но для других экземпляров этот метод очень чистый
Armand
3
Примечание: text-transform:capitalizeне повлияет на ВСЕ ЗАГЛАВНЫЕ буквы.
Боб Штайн
1
Что, если строку (переменную) необходимо использовать для какой-либо операции, кроме отображения?
Fr0zenFyr
обратите внимание, что он сохранит ввод с заглавными буквами, он только преобразует его в представлении
Шериф Элькассаби
25

http://phpjs.org/functions/ucwords:569 есть хороший пример.

function ucwords (str) {
    return (str + '').replace(/^([a-z])|\s+([a-z])/g, function ($1) {
        return $1.toUpperCase();
    });
}

(для краткости опущен комментарий функции из источника. Подробности см. в связанном источнике)

РЕДАКТИРОВАТЬ: обратите внимание, что эта функция вводит в верхний регистр первую букву каждого слова (как задает ваш вопрос), а не только первую букву строки (как требует заголовок вашего вопроса)

Джонатан Фингланд
источник
Это работает лучше, чем принятое решение, в котором слова в предложении после апострофа
пишутся с
Не работает, если в исходной строке есть знак подчеркивания, добавьте его в REGEX для повышения производительности. TY
Руслан Абузант
1
@RuslanAbuzant Это бы ответ на другой вопрос. Интерпретация подчеркивания как разделителя слов (или общего пробела) - это нормально, но это не то, о чем просил OP ... и может даже нарушить его вариант использования.
Джонатан Фингланд,
1
ucwords () отстой. Он не работает с Unicode (особенно с кириллицей, греческим и другими центральноевропейскими алфавитами). Лучше использовать mb_convert_case () на сервере, например: mb_convert_case ($ _ POST ['name'], MB_CASE_TITLE, 'utf-8');
Алексей Кузнецов
14

просто хотел добавить чистое решение javascript (без JQuery)

function capitalize(str) {
  strVal = '';
  str = str.split(' ');
  for (var chr = 0; chr < str.length; chr++) {
    strVal += str[chr].substring(0, 1).toUpperCase() + str[chr].substring(1, str[chr].length) + ' '
  }
  return strVal
}

console.log(capitalize('hello world'));

Рафаэль Херсковичи
источник
1
спасибо братан, просто хочу что-то поправить. это c < str.length;должно бытьchr < str.length;
Лейсам Розарио
13

Я предполагаю, что вы можете использовать substring () и toUpperCase (), чтобы вытащить первый символ, прописать его, а затем заменить первый символ вашей строки результатом.

myString = "cheeseburger";
firstChar = myString.substring( 0, 1 ); // == "c"
firstChar.toUpperCase();
tail = myString.substring( 1 ); // == "heeseburger"
myString = firstChar + tail; // myString == "Cheeseburger"

Я думаю, это должно сработать для вас. Также следует учитывать, что если эти данные отображаются, вы можете добавить в его контейнер класс, который имеет свойство CSS «text-transform: capitalize».

Fudgie
источник
не должно быть типа firstChar = firstChar.toUpperCase (); ? Я попробовал код в Node.js, и мне пришлось это сделать, иначе ничего не изменилось!
Адриан Адайн,
9

Для этого вам даже не нужен Javascript, если вы собираетесь использовать

$('#test').css('textTransform', 'capitalize');

Почему бы не сделать это как css

#test,h1,h2,h3 { text-transform: capitalize; }

или сделайте это как класс и примените этот класс там, где вам это нужно

.ucwords { text-transform: capitalize; }
Брюс Смит
источник
4
Добро пожаловать в Stackoverflow. Ваш ответ предлагает альтернативу (которая может быть совершенно верной в некоторых случаях использования), но на самом деле не отвечает на вопрос. Насколько я понял вопрос, автор хотел фактически преобразовать переменную Javascript, а не только ее визуальное представление.
helmbert
3
Да, но другие люди, которые задаются этим вопросом, могут быть в порядке с ответами на javascript ИЛИ css, например, я, и это было действительно полезно ...
Брайан Пауэлл
6

Слышали когда-нибудь substr()?

Для начала:

$("#test").text($("#test").text().substr(0,1).toUpperCase()+$("#test").text().substr(1,$("#test").text().length));


[Обновить:]

Спасибо @FelixKling за подсказку:

$("#test").text(function(i, text) {
    return text.substr(0,1).toUpperCase() + text.substr(1);
});
Сайфер
источник
4
Вместо того, чтобы вызывать text() четыре раза, передайте функцию text():$("#test").text(function(i, text) { return text.substr(0,1).toUpperCase()+text.substr(1);});
Феликсу Клингу,
1
раскапывать здесь старый корпус, но если бы было известно, что контент попадает в элемент, его было бы намного проще использовать:$('#test').style.textTransform='capitalize';
Рафаэль Херсковичи,
Близко, @Dementic, но это должно быть: $('#test').css('textTransform', 'capitalize'); Кстати, это лучший ответ здесь. Я отправлю это как ответ.
vbullinger 04
@vbullinger - не осуждайте мой код, когда я пишу его чертовски пьяным :) и я люблю js, а не jq, поэтому мой код неправильный, но не слишкомdocument.getElementById('test').style.textTransform='capitalize';
Rafael Herscovici
5

Основываясь на ответе @peter-olson, я использовал более объектно-ориентированный подход без jQuery:

String.prototype.ucwords = function() {
    return this.toLowerCase().replace(/\b[a-z]/g, function(letter) {
        return letter.toUpperCase();
    });
}

alert("hello world".ucwords()); //Displays "Hello World"

Пример: http://jsfiddle.net/LzaYH/1/

один
источник
На мой взгляд, это действительно самый правильный способ. Я бы назвал это toUpperCaseWordsв соответствии с javascript toUpperCase()иtoLowerCase()
А.Б. Кэрролл
4
var mystring = "hello World"
mystring = mystring.substring(0,1).toUpperCase() + 
mystring.substring(1,mystring.length)

console.log(mystring) //gives you Hello World
Ник Чан Абдулла
источник
4

Самый простой способ

let str="hiren raiyani"
str.toLowerCase().replace(/(?<= )[^\s]|^./g, a => a.toUpperCase());

определяемая пользователем функция:

function capitalize(str){
 return str.toLowerCase().replace(/(?<= )[^\s]|^./g, a => a.toUpperCase());
}

вывод: Hiren Raiyani

Используйте код в качестве пользовательской функции или напрямую

Хирен Райяни
источник
3
var ar = 'foo bar spam egg'.split(/\W/);
for(var i=0; i<ar.length; i++) {
  ar[i] = ar[i].substr(0,1).toUpperCase() + ar[i].substr(1,ar[i].length-1) 
}
ar.join(' '); // Foo Bar Spam Egg
Эрикб
источник
3

Вы можете попробовать этот простой код с функциями ucwords в PHP.

function ucWords(text) {
    return text.split(' ').map((txt) => (txt.substring(0, 1).toUpperCase() + txt.substring(1, txt.length))).join(' ');
}
ucWords('hello WORLD');

Это сохранит верхний регистр без изменений.

IamMHussain
источник
3

Это очень просто:

string = 'test';
newString = string[0].toUpperCase() + string.slice(1);
alert(newString);
Sol
источник
2

Полностью основанное на ответе @Dementric, это решение готово к вызову с помощью простого метода jQuery, ucwords ... Спасибо всем, кто внес здесь свой вклад !!!

$.extend({
ucwords : function(str) {
    strVal = '';
    str = str.split(' ');
    for (var chr = 0; chr < str.length; chr++) {
        strVal += str[chr].substring(0, 1).toUpperCase() + str[chr].substring(1, str[chr].length) + ' '
    }
    return strVal
}

});

ПРИМЕР: Это можно вызвать с помощью метода

var string = "this is a test";
string = $.ucwords(string); // Returns "This Is A Test"
JoomGuy
источник
2

Вы можете использовать text-transform: capitalize;для этой работы -

HTML -

<input type="text" style="text-transform: capitalize;" />

JQuery -

$(document).ready(function (){
   var asdf = "WERTY UIOP";
   $('input').val(asdf.toLowerCase());
});

Попробуй это

Примечание: это только изменение визуального представления строки. Если вы предупреждаете об этой строке, она всегда показывает исходное значение строки.

Ишан Джайн
источник
0

Строка, которую нужно опустить до заглавной буквы.

(Оба используют синтаксис JQuery)

function CapitaliseFirstLetter(elementId) {
    var txt = $("#" + elementId).val().toLowerCase();
    $("#" + elementId).val(txt.replace(/^(.)|\s(.)/g, function($1) {
    return $1.toUpperCase(); }));
    }

Кроме того, есть функция для ввода ЗАГЛАВНОЙ СТРОКИ ВСЕ строки:

function CapitaliseAllText(elementId) {
     var txt = $("#" + elementId).val();
     $("#" + elementId).val(txt.toUpperCase());
     }

Синтаксис для использования в событии щелчка текстового поля:

onClick="CapitaliseFirstLetter('TextId'); return false"
Рубист
источник
0

Я использовал этот код -

function ucword(str){
    str = str.toLowerCase().replace(/(^([a-zA-Z\p{M}]))|([ -][a-zA-Z\p{M}])/g, function(replace_latter) { 
        return replace_latter.toUpperCase();
    });  //Can use also /\b[a-z]/g
    return str;  //First letter capital in each word
}

var uc = ucword("good morning. how are you?");
alert(uc);
Чинмай235
источник
0

HTML:

<input class="capitalize" name="Address" type="text" value="" />

Javascript с jQuery:

$(".capitalize").bind("keyup change", function (e) {
        if ($(this).val().length == 1)
            $(this).val($(this).val().toUpperCase());
        $(this).val($(this).val().toLowerCase().replace(/\s[\p{L}a-z]/g, function (letter) {
            return letter.toUpperCase();
        }))
    });
Роберт Беньи
источник
0

Без JQuery

String.prototype.ucwords = function() {
    str = this.trim();
    return str.replace(/(^([a-zA-Z\p{M}]))|([ -][a-zA-Z\p{M}])/g, function(s){
        return s.toUpperCase();
    });
};

console.log('hello world'.ucwords()); // Display Hello World
GerardMetal
источник
0

 var str = "HELLO WORLD HELLO WORLD HELLO WORLD HELLO WORLD";
         str = str.replace(
                        /([A-Z])([A-Z]+)/g,
        				function (a, w1, w2) {
                            return w1 + w2.toLowerCase();
                        });
alert(str);

рок
источник
0

Вот функция ucwords (), безопасная для юникода, которая дополнительно учитывает двойные фамилии, такие как русский Засс-Ранцев, и некоторые благородные имена, такие как Оноре де Бальзак, д'Артаньян, Винсент Ван Гог, Отто фон Бисмарк, Сулайман ибн Давуд и т. Д.:

String.prototype.ucwords = function() {
  return this.toLowerCase()
    .replace(/(^|\s|\-)[^\s$]/g, function(m) {
       return m.toUpperCase();
    })
    // French, Arabic and some noble names...
    .replace(/\s(Of|De|Van|Von|Ibn|Из|Ван|Фон|Ибн)\s/g, function(m) { // Honoré de Balzac, Vincent van Gogh, Otto von Bismarck, Sulaymān ibn Dāwūd etc.
       return m.toLowerCase();
    })
    .replace(/(^|\s)(D|Д)(['’][^\s$])/g, function(m, p1, p2, p3) { // D'Artagnan or d'Artagnan / Д’Артаньян или д’Артаньян
       return p1 + (p1 === "" ? p2/*.toUpperCase()*/ : p2.toLowerCase()) + p3.toUpperCase();
    });
}
Алексей Кузнецов
источник
0

Самый простой способ заглавной буквы в JS

var string = "made in india";

string =string .toLowerCase().replace(/\b[a-z]/g, function(letter){return  letter.toUpperCase();});

alert(string );

Результат: «Сделано в Индии».

Любовь Кумара
источник