문자열에서 단어를 대문자로 사용하는 가장 좋은 방법은 무엇입니까?
문자열에서 단어를 대문자로 사용하는 가장 좋은 방법은 무엇입니까?
답변:
/**
* Capitalizes first letters of words in string.
* @param {string} str String to be modified
* @param {boolean=false} lower Whether all other letters should be lowercased
* @return {string}
* @usage
* capitalize('fix this string'); // -> 'Fix This String'
* capitalize('javaSCrIPT'); // -> 'JavaSCrIPT'
* capitalize('javaSCrIPT', true); // -> 'Javascript'
*/
const capitalize = (str, lower = false) =>
(lower ? str.toLowerCase() : str).replace(/(?:^|\s|["'([{])+\S/g, match => match.toUpperCase());
;
capitalize(' javascript'); // -> ' Javascript'
capitalize('бабушка курит трубку'); // -> 'Бабушка Курит Трубку'
capitalize('località àtilacol') // -> 'Località Àtilacol'
capitalize(`"quotes" 'and' (braces) {braces} [braces]`); // -> "Quotes" 'And' (Braces) {Braces} [Braces]
'CHECK THIS OUT'.capitalize(true) -> "Check This Out"
. 마인드 true
매개 변수.
문자열 내에서 단어를 대문자로 사용하는 가장 짧은 구현은 ES6의 화살표 함수를 사용하는 다음과 같습니다.
'your string'.replace(/\b\w/g, l => l.toUpperCase())
// => 'Your String'
ES5 호환 구현 :
'your string'.replace(/\b\w/g, function(l){ return l.toUpperCase() })
// => 'Your String'
정규식은 기본적으로 주어진 문자열 내에서 각 단어의 첫 글자와 일치하며 해당 글자 만 대문자로 변환합니다.
'ÿöur striñg'.replace(/(^|\s)\S/g, l => l.toUpperCase())
이 정규 표현식은 첫 번째 문자와 공백이 아닌 모든 문자 앞에 주어진 문자열 내에서 공백을 일치시키고 해당 문자 만 대문자로 변환합니다.
캡처하지 않은 그룹은 여기에서 다음과 같이 사용될 수 있습니다. /(?:^|\s)\S/g
하지만 g
정규식 내의 플래그는 설계 상 하위 그룹을 캡처하지 않습니다.
건배!
päijät-häme
이된다PäIjäT-HäMe
EisbäRen
예를 들어 하나의 결과입니다.
Päijät-Häme
하지만 적어도 Chrome 공백에는 대시 (-)가 포함되지 않으므로 이름의 두 번째 부분은 대문자로 표시되지 않습니다. 로 고정 할 수 있습니다 /(^|\s|-)\S/g
.
function capitalize(s){
return s.toLowerCase().replace( /\b./g, function(a){ return a.toUpperCase(); } );
};
capitalize('this IS THE wOrst string eVeR');
출력 : "이것은 최악의 문자열입니다"
이 솔루션이 내 솔루션을 대체하는 것으로 보입니다 : https://stackoverflow.com/a/7592235/104380
VSYNC가 제공하는 대답은 작동 만큼 당신이 편지를 강조하지 않는 입력 문자열을.
이유를 모르지만 분명히 \b
정규 표현식 일치 문자가 악센트 문자 (IE8 및 Chrome에서 테스트 됨)와 같이 문자열 "località"
이 잘못 대문자로 변환됩니다"LocalitÀ"
( à
문자가 대문자로 표시되어 정규 표현식이 단어 경계라고 생각합니다)
악센트 문자와 함께 작동 하는보다 일반적인 기능 은 다음 과 같습니다.
String.prototype.toCapitalize = function()
{
return this.toLowerCase().replace(/^.|\s\S/g, function(a) { return a.toUpperCase(); });
}
다음과 같이 사용할 수 있습니다.
alert( "hello località".toCapitalize() );
" javascript".toCapitalize() -> " javascript"
모든 사람이 요청한 JavaScript 답변을 제공 했으므로 CSS 속성 text-transform: capitalize
이 정확히이 작업을 수행합니다.
나는 이것이 당신이 요구하는 것이 아닐 수도 있다는 것을 알고 있습니다 -당신은 우리에게 당신이 이것을 실행하는 어떤 맥락도주지 않았습니다-그러나 그것이 단지 프레젠테이션을위한 것이라면, CSS 대안으로 확실히 갈 것입니다.
jQuery fame의 John Resig는 John Gruber가 작성한 perl 스크립트를 JavaScript로 이식했습니다. 이 스크립트는보다 지능적인 방식으로 대문자를 사용하며 'of'및 'and'와 같은 작은 단어는 대문자로 표시하지 않습니다.
여기에서 찾을 수 있습니다 : JavaScript에서 Title Capitalization
JavaScript 및 HTML 사용
String.prototype.capitalize = function() {
return this.replace(/(^|\s)([a-z])/g, function(m, p1, p2) {
return p1 + p2.toUpperCase();
});
};
<form name="form1" method="post">
<input name="instring" type="text" value="this is the text string" size="30">
<input type="button" name="Capitalize" value="Capitalize >>" onclick="form1.outstring.value=form1.instring.value.capitalize();">
<input name="outstring" type="text" value="" size="30">
</form>
기본적으로 할 수 string.capitalize()
있으며 각 단어의 첫 글자마다 대문자를 사용합니다.
출처 : http://www.mediacollege.com/internet/javascript/text/case-capitalize.html
if (object.capitalize) {...} else {String.prototype.capitalize = function()....}
여기서 object는 유형 String
입니다. 정말 간단합니다.
Ivo의 대답은 좋지만 \w
0-9와 AZ를 대문자로 지정할 필요가 없으므로 일치하지 않는 것을 선호합니다 . 우리는 그것들을 무시하고 az에서만 일치 할 수 있습니다.
'your string'.replace(/\b[a-z]/g, match => match.toUpperCase())
// => 'Your String'
동일한 출력이지만 자체 문서화 코드 측면에서 더 명확하다고 생각합니다.
"Är Toaletten"
. 귀하의 답변은 매우 훌륭하게 답변 된 지 몇 년이 지난 후에도 토론에 도움이되지 않습니다.
/\b\w/g
영어 이외의 문자도 실패합니다. 모든 사람이 유니 코드 문자를 다루지는 않으며, 이것이 원하지 않는 사람들을 도울 것입니다.
console.log( _.capitalize('ÿöur striñg') );
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>
내 해결책 :
String.prototype.toCapital = function () {
return this.toLowerCase().split(' ').map(function (i) {
if (i.length > 2) {
return i.charAt(0).toUpperCase() + i.substr(1);
}
return i;
}).join(' ');
};
예:
'álL riGht'.toCapital();
// Returns 'Áll Right'
'a áAA. bb . bbb .cc .d'.toCapital();
=>a Áaa. bb . Bbb .cc .d
여기에는 대부분의 기본 사용 사례가 포함됩니다.
const capitalize = (str) => {
if (typeof str !== 'string') {
throw Error('Feed me string')
} else if (!str) {
return ''
} else {
return str
.split(' ')
.map(s => {
if (s.length == 1 ) {
return s.toUpperCase()
} else {
const firstLetter = s.split('')[0].toUpperCase()
const restOfStr = s.substr(1, s.length).toLowerCase()
return firstLetter + restOfStr
}
})
.join(' ')
}
}
capitalize('THIS IS A BOOK') // => This Is A Book
capitalize('this is a book') // => This Is A Book
capitalize('a 2nd 5 hour boOk thIs weEk') // => A 2nd 5 Hour Book This Week
편집 : 매핑의 가독성이 향상되었습니다.
/\b\w/g
...
이 솔루션은 정규식을 사용하지 않고 악센트 문자를 지원하며 거의 모든 브라우저에서도 지원됩니다.
function capitalizeIt(str) {
if (str && typeof(str) === "string") {
str = str.split(" ");
for (var i = 0, x = str.length; i < x; i++) {
if (str[i]) {
str[i] = str[i][0].toUpperCase() + str[i].substr(1);
}
}
return str.join(" ");
} else {
return str;
}
}
용법:
console.log (capitalizeIt ( 'çao 2nd inside Javascript programme')) ;;
산출:
Çao 2nd Inside Javascript 프로그램
http://www.mediacollege.com/internet/javascript/text/case-capitalize.html 은 많은 답변 중 하나입니다.
이러한 문제에 필요한 모든 것이 Google이 될 수 있습니다.
순진한 접근법은 문자열을 공백으로 나누고 결과 배열의 각 요소의 첫 글자를 대문자로 묶어 다시 결합하는 것입니다. 이것은 기존 대문자를 그대로 둡니다 (예 : HTML은 HTML을 유지하고 HTML과 같은 바보가되지 않습니다). 그 영향을 원하지 않으면, 분리하기 전에 전체 문자열을 소문자로 바꾸십시오.
이 코드는 점 다음에 단어를 대문자로 표시합니다.
function capitalizeAfterPeriod(input) {
var text = '';
var str = $(input).val();
text = convert(str.toLowerCase().split('. ')).join('. ');
var textoFormatado = convert(text.split('.')).join('.');
$(input).val(textoFormatado);
}
function convert(str) {
for(var i = 0; i < str.length; i++){
str[i] = str[i].split('');
if (str[i][0] !== undefined) {
str[i][0] = str[i][0].toUpperCase();
}
str[i] = str[i].join('');
}
return str;
}
나는 쉬운 과정으로 가고 싶습니다. 쉽게 반복 할 수 있도록 문자열을 배열로 변경 한 다음 map 함수를 사용하여 원하는대로 각 단어를 변경하십시오.
function capitalizeCase(str) {
var arr = str.split(' ');
var t;
var newt;
var newarr = arr.map(function(d){
t = d.split('');
newt = t.map(function(d, i){
if(i === 0) {
return d.toUpperCase();
}
return d.toLowerCase();
});
return newt.join('');
});
var s = newarr.join(' ');
return s;
}
Jquery 또는 Javascipt는이를 달성하기위한 기본 제공 방법을 제공하지 않습니다.
CSS 테스트 변환 (text-transform : capitalize;)은 실제로 문자열 데이터를 대문자로 표시하지 않지만 화면에 대문자로 표시합니다.
일반 vanillaJS를 사용하여 데이터 수준에서이를 달성하는보다 합법적 인 방법을 찾고 있다면이 솔루션을 사용하십시오 =>
var capitalizeString = function (word) {
word = word.toLowerCase();
if (word.indexOf(" ") != -1) { // passed param contains 1 + words
word = word.replace(/\s/g, "--");
var result = $.camelCase("-" + word);
return result.replace(/-/g, " ");
} else {
return $.camelCase("-" + word);
}
}
locutus도 있습니다 : https://locutus.io/php/strings/ucwords/ 이 방법으로 정의합니다 :
function ucwords(str) {
// discuss at: http://locutus.io/php/ucwords/
// original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
// improved by: Waldo Malqui Silva (http://waldo.malqui.info)
// improved by: Robin
// improved by: Kevin van Zonneveld (http://kvz.io)
// bugfixed by: Onno Marsman (https://twitter.com/onnomarsman)
// bugfixed by: Cetvertacov Alexandr (https://github.com/cetver)
// input by: James (http://www.james-bell.co.uk/)
// example 1: ucwords('kevin van zonneveld')
// returns 1: 'Kevin Van Zonneveld'
// example 2: ucwords('HELLO WORLD')
// returns 2: 'HELLO WORLD'
// example 3: ucwords('у мэри был маленький ягненок и она его очень любила')
// returns 3: 'У Мэри Был Маленький Ягненок И Она Его Очень Любила'
// example 4: ucwords('τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός')
// returns 4: 'Τάχιστη Αλώπηξ Βαφής Ψημένη Γη, Δρασκελίζει Υπέρ Νωθρού Κυνός'
return (str + '').replace(/^(.)|\s+(.)/g, function ($1) {
return $1.toUpperCase();
});
};
text-transform:capitalize;
.