Chữ hoa đầu tiên của biến


88

Tôi đã tìm kiếm trên web không thể tìm thấy bất cứ điều gì để giúp tôi. Tôi muốn viết hoa chữ cái đầu tiên của mỗi từ trong một biến.

Cho đến nay tôi đã thử:

toUpperCase();

Và không có may mắn, vì nó viết hoa tất cả các chữ cái.


Câu trả lời:


227

Sử dụng hàm .replace[MDN] để thay thế các chữ cái thường bắt đầu một từ bằng chữ cái viết hoa.

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


Chỉnh sửa: Nếu bạn đang xử lý các ký tự từ không chỉ az, thì biểu thức chính quy (phức tạp hơn) sau đây có thể phù hợp hơn với mục đích của bạn.

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
Điều này không hoạt động với các tên như Björn Lüchinger, điều này trở thành BjöRn LüChinger. Bất kỳ sửa chữa cho điều này?
Dediqated

2
@Dediqated Cảm ơn bạn đã chỉ ra điều đó, hãy cho tôi biết nếu bản chỉnh sửa có ích.
Peter Olson,

Hoạt động tuyệt vời! Bất kỳ gợi ý nào về việc sửa đổi nên là gì nếu tôi chỉ muốn chuyển đổi thành chữ hoa ký tự đầu tiên của chuỗi? (thay vì từng từ đơn lẻ)
Andres SK

6
@andufo Chắc chắn, điều đó thực sự đơn giản hơn nhiều. Chỉ cần sử dụngstr[0].toUpperCase() + str.slice(1)
Peter Olson

@PeterOlson cảm ơn vì câu trả lời! Tôi cũng đã kết thúc việc sử dụng 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);để che các ký tự đặc biệt.
Andres SK

72

Cách dễ dàng hơn nhiều:

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

Tôi phải ghi công cho @Dementic vì đã dẫn tôi đi đúng đường. Đơn giản hơn nhiều so với bất cứ điều gì các bạn đang đề xuất.


32
Điều này chỉ thay đổi biểu diễn trực quan của chuỗi chứ không thay đổi giá trị chuỗi.
toxaq

1
Bạn không thể áp dụng điều này để biến lấy từ DB Mặc dù vậy, nhưng đối với instaces khác phương pháp này rất sạch sẽ
Armand

3
Lưu ý: text-transform:capitalizesẽ không ảnh hưởng đến TẤT CẢ CÁC CHỮ HOA.
Bob Stein,

1
Điều gì sẽ xảy ra nếu chuỗi (biến) phải được sử dụng cho một số hoạt động khác ngoài việc hiển thị?
Fr0zenFyr

lưu ý rằng nó sẽ lưu dữ liệu đầu vào với cách viết hoa, nó sẽ chỉ chuyển đổi nó trong chế độ xem
Sherif Elkassaby

25

http://phpjs.org/functions/ucwords:569 có một ví dụ điển hình

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

(Bỏ qua bình luận chức năng từ nguồn cho ngắn gọn. Vui lòng xem nguồn liên kết để biết chi tiết)

CHỈNH SỬA: Xin lưu ý rằng hàm này viết hoa chữ cái đầu tiên của mỗi từ (như câu hỏi của bạn) và không chỉ chữ cái đầu tiên của một chuỗi (như tiêu đề câu hỏi của bạn yêu cầu)


Đây tốt hơn so với các công trình chấp nhận một giải pháp mà tận dụng các từ trong câu sau dấu nháy đơn, vì vậy ví dụ: "Tôi là một ví dụ" trở thành "Tôi là một ví dụ"
lizardhr

Không hoạt động nếu bạn có dấu gạch dưới trong chuỗi ban đầu của mình, vui lòng thêm nó vào REGEX của bạn để có hiệu suất tốt hơn. TY
Ruslan Abuzant

1
@RuslanAbuzant Đó sẽ là câu trả lời cho một câu hỏi khác. Giải thích một dấu gạch dưới như một dấu phân tách từ (hoặc khoảng trống chung) là tốt, nhưng không phải là những gì OP đang yêu cầu ... và thậm chí có thể phá vỡ trường hợp sử dụng của anh ấy.
Jonathan Fingland

1
ucwords () thật tệ. Nó không hoạt động với Unicode (đặc biệt với các bảng chữ cái cyrillic, Hy Lạp và các bảng chữ cái Trung Âu khác). Tốt hơn hãy sử dụng mb_convert_case () trên back-end, ví dụ: mb_convert_case ($ _ POST ['name'], MB_CASE_TITLE, 'utf-8');
Aleksey Kuznetsov

14

chỉ muốn thêm một giải pháp javascript thuần túy (không có 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ảm ơn anh em, chỉ muốn sửa một cái gì đó. này c < str.length;nênchr < str.length;
Leysam Rosario

13

Tôi tưởng tượng bạn có thể sử dụng substring () và toUpperCase () để lấy ra ký tự đầu tiên, viết hoa nó, sau đó thay thế ký tự đầu tiên trong chuỗi của bạn bằng kết quả.

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

Tôi nghĩ rằng điều đó sẽ làm việc cho bạn. Một điều khác cần xem xét là nếu dữ liệu này đang được hiển thị, bạn có thể thêm một lớp vào vùng chứa của nó có thuộc tính CSS "text-biến đổi: capitalize".


không nên có như firstChar = firstChar.toUpperCase (); ? Tôi đã thử mã trong Node.js và tôi phải làm điều đó hoặc không có gì thay đổi!
Adrian Adaine

9

Để làm điều này, bạn thậm chí không cần Javascript nếu bạn định sử dụng

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

Tại sao không làm điều này như css như

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

hoặc thực hiện nó như một lớp học và áp dụng lớp học đó cho bất cứ nơi nào bạn cần

.ucwords { text-transform: capitalize; }

4
Chào mừng bạn đến với Stackoverflow. Câu trả lời của bạn đang gợi ý một giải pháp thay thế (có thể hoàn toàn hợp lệ trong một số trường hợp sử dụng), nhưng không thực sự trả lời câu hỏi. Như tôi đã hiểu câu hỏi, tác giả muốn thực sự biến đổi biến Javascript chứ không chỉ là biểu diễn trực quan.
helmbert,

3
Yeah, nhưng những người khác đến với câu hỏi này có thể là okay với javascript HOẶC css câu trả lời, như tôi, và điều này là thực sự hữu ích ...
Brian Powell

6

Đã bao giờ nghe nói về substr()?

Đối với người mới bắt đầu:

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


[Cập nhật:]

Cảm ơn @FelixKling về mẹo:

$("#test").text(function(i, text) {
    return text.substr(0,1).toUpperCase() + text.substr(1);
});

4
Thay vì gọi text() Bốn lần, vượt qua một chức năng để text():$("#test").text(function(i, text) { return text.substr(0,1).toUpperCase()+text.substr(1);});
Felix Kling

1
đào lên đoàn cũ ở đây, nhưng nếu nó được biết đến nội dung đi vào một yếu tố, nó sẽ dễ dàng hơn nhiều để sử dụng:$('#test').style.textTransform='capitalize';
Rafael Herscovici

Đóng, @Dementic, nhưng nó phải là: $('#test').css('textTransform', 'capitalize'); BTW, đây là câu trả lời tốt nhất ở đây. Tôi sẽ gửi nó như một câu trả lời.
vbullinger

@vbullinger - dont thẩm phán mã của tôi khi tôi viết nó say như là địa ngục :) và tôi yêu js, không JQ, do đó, mã của tôi là sai, nhưng không quá nhiềudocument.getElementById('test').style.textTransform='capitalize';
Rafael Herscovici

5

Dựa trên câu trả lời của @ peter-olson, tôi đã thực hiện một cách tiếp cận hướng đối tượng hơn mà không có 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"

Ví dụ: http://jsfiddle.net/LzaYH/1/


Đây thực sự là cách đúng đắn nhất, theo tôi. Tôi sẽ gọi nó là toUpperCaseWordstrong việc giữ phù hợp với javascript của toUpperCase()toLowerCase()
AB Carroll

4
var mystring = "hello World"
mystring = mystring.substring(0,1).toUpperCase() + 
mystring.substring(1,mystring.length)

console.log(mystring) //gives you Hello World

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

Bạn có thể thử mã đơn giản này với các tính năng của ucwords trong PHP.

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

Nó sẽ giữ cho các chữ hoa không thay đổi.


3

Nó đơn giản như sau:

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

2

Hoàn toàn dựa trên câu trả lời của @Dementric, giải pháp này đã sẵn sàng để gọi bằng một phương thức jQuery đơn giản, 'ucwords' ... Cảm ơn mọi người đã đóng góp ở đây !!!

$.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
}

});

VÍ DỤ: Điều này có thể được gọi bằng phương pháp

var string = "this is a test";
string = $.ucwords(string); // Returns "This Is A Test"

2

Bạn có thể dùng text-transform: capitalize; cho công việc này -

HTML -

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

JQuery -

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

Thử đi

Lưu ý: Nó chỉ thay đổi biểu diễn trực quan của chuỗi. Nếu bạn cảnh báo chuỗi này, nó sẽ luôn hiển thị giá trị ban đầu của chuỗi.


2

Cách đơn giản nhất

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

đầu ra: Hiren Raiyani

Sử dụng mã làm chức năng do người dùng xác định hoặc trực tiếp


0

Chuỗi để hạ thấp trước khi Viết hoa chữ cái đầu tiên.

(Cả hai đều sử dụng cú pháp Jquery)

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

Ngoài một chức năng Viết hoa toàn bộ chuỗi:

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

Cú pháp sử dụng cho sự kiện nhấp chuột của hộp văn bản:

onClick="CapitaliseFirstLetter('TextId'); return false"

0

Tôi đã sử dụng mã này -

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 với 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

Không có 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

Đây là hàm ucwords () an toàn cho unicode, hàm này cũng tôn trọng các tên kép như Засс-Ранцев trong tiếng Nga và một số tên cao quý như Honoré de Balzac, d'Artagnan, Vincent van Gogh, Otto von Bismarck, Sulaymān ibn Dāwūd, v.v.:

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

Cách dễ nhất để viết hoa chữ cái đầu tiên trong JS

var string = "made in india";

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

alert(string );

Kết quả: "Sản xuất tại Ấn Độ"

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.