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.
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:
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 Αλφα"
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?
str[0].toUpperCase() + str.slice(1)
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.
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.
text-transform:capitalize
sẽ không ảnh hưởng đến TẤT CẢ CÁC CHỮ HOA.
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)
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'));
c < str.length;
nênchr < str.length;
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".
Để 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; }
Đã 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);
});
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);});
$('#test').style.textTransform='capitalize';
$('#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.
document.getElementById('test').style.textTransform='capitalize';
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/
toUpperCaseWords
trong việc giữ phù hợp với javascript của toUpperCase()
vàtoLowerCase()
var mystring = "hello World"
mystring = mystring.substring(0,1).toUpperCase() +
mystring.substring(1,mystring.length)
console.log(mystring) //gives you Hello World
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.
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"
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());
});
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.
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
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"
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);
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();
}))
});
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
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);
Đâ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();
});
}