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


88

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

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

toUpperCase();

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


Ответы:


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 за то, что он направил меня по правильному пути. Намного проще, чем то, что вы предлагаете.


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».


не должно быть типа 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

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

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

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


3

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

string = 'test';
newString = string[0].toUpperCase() + string.slice(1);
alert(newString);

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"

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

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.