2011-02-02 85 views

Trả lời

467

Có một câu trả lời tốt here:

function toTitleCase(str) 
{ 
    return str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();}); 
} 
+0

nhờ dexter giải pháp này hoạt động hoàn hảo cho nhu cầu của tôi – pepe

+3

chỉ cần tự hỏi (có thể là một câu hỏi newbie) nhưng làm thế nào để javascript biết rằng txt trong 'function (txt)' tham số tham chiếu đến 'str'? Có phải vì bạn đang gọi 'replace' trên' str' để nó có thể giả định điều đó? – aug

+4

nó không thực sự đi qua trong 'str' - nó đi qua trong" chuỗi con phù hợp "- ví dụ: kết quả của regex. Có một giải thích tốt về các trang dev của Mozilla tại https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/String/replace, dưới tiêu đề 'Chỉ định một hàm làm tham số' – Dexter

115

Bạn có thể sử dụng CSS:

p.capitalize {text-transform:capitalize;} 
+2

http://www.w3schools.com/css/pr_text_text-transform.asp – hunter

+1

Cảm ơn để thêm nguồn của tôi;) – capdragon

+2

nhờ capdragon - nhưng tôi cần tên thành phố phải được thay đổi về phía khách hàng và lưu trong cơ sở dữ liệu như được viết hoa - tôi không nghĩ rằng CSS sẽ cho phép điều đó, phải không? – pepe

5

Các hàm JavaScript:

String.prototype.capitalize = function(){ 
     return this.replace(/(^|\s)([a-z])/g , function(m,p1,p2){ return p1+p2.toUpperCase(); }); 
     }; 

Để sử dụng chức năng này:

capitalizedString = someString.toLowerCase().capitalize(); 

Ngoài ra, điều này sẽ hoạt động trên nhiều chuỗi từ.

Để đảm bảo tên Thành phố được chuyển đổi được chèn vào cơ sở dữ liệu, chữ viết hoa và chữ cái đầu tiên được viết hoa, thì bạn cần phải sử dụng JavaScript trước khi gửi nó sang phía máy chủ. CSS chỉ đơn giản là kiểu, nhưng dữ liệu thực tế sẽ vẫn được tạo kiểu trước. Hãy xem ví dụ này jsfiddle và so sánh thông báo cảnh báo với đầu ra được tạo kiểu.

+2

Có vẻ tốt, nhưng không thêm điều này vào 'String.prototype'. –

+0

'if (! String.prototype.toTitleCase) { String.prototype.toTitleCase = function() { trả về this.toLowerCase(). Replace (/ (^ | \ s) ([az])/g, function (m, p1, p2) {return p1 + p2.toUpperCase();}); }; } 'nếu bạn muốn thêm vào String.prototype và thêm một toLowerCase() – user1071182

+0

Nó không hoạt động với dấu trọng âm, như" Úrsula " –

17
function convert_case(str) { 
    var lower = str.toLowerCase(); 
    return lower.replace(/(^|)(\w)/g, function(x) { 
    return x.toUpperCase(); 
    }); 
} 
+2

Hoặc, thanh lịch hơn một chút: ' str.toLowerCase(). Replace (/()^|) (\ w)/g, String.toUpperCase) ' – rakensi

+1

@ bình luận của enver sẽ không hoạt động vì' String.toUpperCase' sẽ bị ràng buộc với đối tượng 'String' (' this' sẽ là 'String', không phải là chuỗi con) – kikito

+0

Điều đó hoàn toàn đúng. Tôi xin lỗi vì đã không thử nghiệm điều này và giả sử nó sẽ hoạt động. – rakensi

Các vấn đề liên quan