Szukałem w Internecie i nie mogę znaleźć niczego, co mogłoby mi pomóc. Chcę, aby pierwsza litera każdego słowa była wielka w zmiennej.
Do tej pory próbowałem:
toUpperCase();
I nie miałem szczęścia, ponieważ wszystkie litery są wielkie.
Szukałem w Internecie i nie mogę znaleźć niczego, co mogłoby mi pomóc. Chcę, aby pierwsza litera każdego słowa była wielka w zmiennej.
Do tej pory próbowałem:
toUpperCase();
I nie miałem szczęścia, ponieważ wszystkie litery są wielkie.
Odpowiedzi:
Użyj funkcji .replace[MDN], aby zamienić małe litery zaczynające się na wielką literę.
var str = "hello world";
str = str.toLowerCase().replace(/\b[a-z]/g, function(letter) {
return letter.toUpperCase();
});
alert(str); //Displays "Hello World"
Edycja: Jeśli masz do czynienia ze znakami słów innymi niż tylko az, poniższe (bardziej skomplikowane) wyrażenie regularne może lepiej pasować do twoich celów.
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üchingerto się stanie BjöRn LüChinger. Jakieś rozwiązanie tego problemu?
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);na opisywaniu znaków specjalnych.
O wiele łatwiejszy sposób:
$('#test').css('textTransform', 'capitalize');
Muszę przyznać @Dementic pewną zasługę za prowadzenie mnie właściwą ścieżką. O wiele prostsze niż to, co proponujesz.
text-transform:capitalizenie ma wpływu na WIELKIE LITERY.
http://phpjs.org/functions/ucwords:569 ma dobry przykład
function ucwords (str) {
return (str + '').replace(/^([a-z])|\s+([a-z])/g, function ($1) {
return $1.toUpperCase();
});
}
(pominięto komentarz funkcji ze źródła ze względu na zwięzłość. Szczegółowe informacje można znaleźć w połączonym źródle)
EDYTUJ: Zwróć uwagę, że ta funkcja zamienia na wielką wielką pierwszą literę każdego słowa (zgodnie z pytaniem), a nie tylko pierwszą literę ciągu (zgodnie z tytułem pytania)
chciałem tylko dodać czyste rozwiązanie javascript (bez 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;powinno byćchr < str.length;
Wyobrażam sobie, że możesz użyć funkcji substring () i toUpperCase (), aby wyciągnąć pierwszy znak, zamienić go na wielką, a następnie zamienić pierwszy znak ciągu na wynik.
myString = "cheeseburger";
firstChar = myString.substring( 0, 1 ); // == "c"
firstChar.toUpperCase();
tail = myString.substring( 1 ); // == "heeseburger"
myString = firstChar + tail; // myString == "Cheeseburger"
Myślę, że to powinno działać dla Ciebie. Inną rzeczą do rozważenia jest to, że jeśli te dane są wyświetlane, możesz dodać do kontenera klasę, która ma właściwość CSS „text-transform: capitalize”.
Aby to zrobić, nie potrzebujesz nawet JavaScript, jeśli masz zamiar używać
$('#test').css('textTransform', 'capitalize');
Dlaczego nie zrobić tego tak jak w CSS?
#test,h1,h2,h3 { text-transform: capitalize; }
lub zrób to jako klasa i zastosuj tę klasę tam, gdzie jej potrzebujesz
.ucwords { text-transform: capitalize; }
Słyszałeś kiedyś o substr()?
Na początek:
$("#test").text($("#test").text().substr(0,1).toUpperCase()+$("#test").text().substr(1,$("#test").text().length));
[Aktualizacja:]
Dzięki @FelixKling za wskazówkę:
$("#test").text(function(i, text) {
return text.substr(0,1).toUpperCase() + text.substr(1);
});
text() cztery razy, przekaż funkcję do text():$("#test").text(function(i, text) { return text.substr(0,1).toUpperCase()+text.substr(1);});
$('#test').style.textTransform='capitalize';
$('#test').css('textTransform', 'capitalize'); okazji, to najlepsza odpowiedź tutaj. Podam to jako odpowiedź.
document.getElementById('test').style.textTransform='capitalize';
Opierając się na odpowiedzi @ peter-olson, przyjąłem bardziej zorientowane obiektowo podejście bez 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"
Przykład: http://jsfiddle.net/LzaYH/1/
toUpperCaseWordszgodnie z javascript toUpperCase()itoLowerCase()
var mystring = "hello World"
mystring = mystring.substring(0,1).toUpperCase() +
mystring.substring(1,mystring.length)
console.log(mystring) //gives you Hello World
Najprostszy sposób
let str="hiren raiyani"
str.toLowerCase().replace(/(?<= )[^\s]|^./g, a => a.toUpperCase());
funkcja zdefiniowana przez użytkownika:
function capitalize(str){
return str.toLowerCase().replace(/(?<= )[^\s]|^./g, a => a.toUpperCase());
}
wyjście: Hiren Raiyani
Użyj kodu jako funkcji zdefiniowanej przez użytkownika lub bezpośrednio
Możesz wypróbować ten prosty kod z funkcjami ucwords w PHP.
function ucWords(text) {
return text.split(' ').map((txt) => (txt.substring(0, 1).toUpperCase() + txt.substring(1, txt.length))).join(' ');
}
ucWords('hello WORLD');
Dzięki temu górne skrzynki pozostaną niezmienione.
Oparte całkowicie na odpowiedzi @Dementric, to rozwiązanie jest gotowe do wywołania za pomocą prostej metody jQuery „ucwords”… Dziękujemy wszystkim, którzy tu przyczynili się !!!
$.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
}
});
PRZYKŁAD: Można to wywołać za pomocą metody
var string = "this is a test";
string = $.ucwords(string); // Returns "This Is A Test"
Możesz użyć text-transform: capitalize;do tej pracy -
HTML -
<input type="text" style="text-transform: capitalize;" />
JQuery -
$(document).ready(function (){
var asdf = "WERTY UIOP";
$('input').val(asdf.toLowerCase());
});
Uwaga: zmienia tylko wizualną reprezentację ciągu. Jeśli ostrzeżesz ten ciąg, zawsze pokaże oryginalną wartość ciągu.
Ciąg do zmniejszenia przed zamianą pierwszej litery na wielką literę.
(Oba używają składni Jquery)
function CapitaliseFirstLetter(elementId) {
var txt = $("#" + elementId).val().toLowerCase();
$("#" + elementId).val(txt.replace(/^(.)|\s(.)/g, function($1) {
return $1.toUpperCase(); }));
}
Dodatkowo funkcja do wykorzystania CAŁEGO napisu wielką literą:
function CapitaliseAllText(elementId) {
var txt = $("#" + elementId).val();
$("#" + elementId).val(txt.toUpperCase());
}
Składnia do użycia w zdarzeniu kliknięcia pola tekstowego:
onClick="CapitaliseFirstLetter('TextId'); return false"
Użyłem tego kodu -
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 z 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();
}))
});
Bez 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);
Oto funkcja ucwords () bezpieczna dla Unicode, która dodatkowo uwzględnia podwójne nazwiska, takie jak rosyjskie Засс-Ранцев i niektóre szlachetne nazwiska, takie jak Honoré de Balzac, d'Artagnan, Vincent van Gogh, Otto von Bismarck, Sulaymān ibn Dāwūd itp.
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();
});
}
Najłatwiejszy sposób na wielką pierwszą literę w JS
var string = "made in india";
string =string .toLowerCase().replace(/\b[a-z]/g, function(letter){return letter.toUpperCase();});
alert(string );
Wynik: „Wyprodukowano w Indiach”