문자열을 제목 대소 문자로 변환하는 간단한 방법이 있습니까? 예를 john smith
하게된다 John Smith
. 나는 John Resig의 해결책 과 같은 복잡한 것을 찾고 있지 않습니다 .
답변
이 시도:
function toTitleCase(str) {
return str.replace(
/\w\S*/g,
function(txt) {
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
}
);
}
<form>
Input:
<br /><textarea name="input" onchange="form.output.value=toTitleCase(this.value)" onkeyup="form.output.value=toTitleCase(this.value)"></textarea>
<br />Output:
<br /><textarea name="output" readonly onclick="select(this)"></textarea>
</form>
답변
Greg Dean의 기능을 적응시키는 약간 더 우아한 방법 :
String.prototype.toProperCase = function () {
return this.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
};
다음과 같이 호출하십시오.
"pascal".toProperCase();
답변
답변
여기 내 버전이 있습니다. IMO 이해하기 쉽고 우아합니다.
var str = "foo bar baz"
console.log(
str.split(' ')
.map(w => w[0].toUpperCase() + w.substr(1).toLowerCase())
.join(' ')
)
// returns "Foo Bar Baz"
답변
다음은 제목으로 변환하지만 정의 된 약어는 대문자로, 작은 단어는 소문자로 유지하는 함수입니다.
String.prototype.toTitleCase = function() {
var i, j, str, lowers, uppers;
str = this.replace(/([^\W_]+[^\s-]*) */g, function(txt) {
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
});
// Certain minor words should be left lowercase unless
// they are the first or last words in the string
lowers = ['A', 'An', 'The', 'And', 'But', 'Or', 'For', 'Nor', 'As', 'At',
'By', 'For', 'From', 'In', 'Into', 'Near', 'Of', 'On', 'Onto', 'To', 'With'];
for (i = 0, j = lowers.length; i < j; i++)
str = str.replace(new RegExp('\\s' + lowers[i] + '\\s', 'g'),
function(txt) {
return txt.toLowerCase();
});
// Certain words such as initialisms or acronyms should be left uppercase
uppers = ['Id', 'Tv'];
for (i = 0, j = uppers.length; i < j; i++)
str = str.replace(new RegExp('\\b' + uppers[i] + '\\b', 'g'),
uppers[i].toUpperCase());
return str;
}
예를 들면 다음과 같습니다.
"TO LOGIN TO THIS SITE and watch tv, please enter a valid id:".toTitleCase();
// Returns: "To Login to This Site and Watch TV, Please Enter a Valid ID:"
답변
다른 답변보다 다음을 선호합니다. 각 단어의 첫 글자 만 일치하고 대문자를 사용합니다. 더 간단한 코드, 더 읽기 쉽고 바이트가 적습니다. 약어가 왜곡되는 것을 방지하기 위해 기존 대문자를 유지합니다. 그러나 항상 toLowerCase()
문자열을 먼저 호출 할 수 있습니다 .
function title(str) {
return str.replace(/(^|\s)\S/g, function(t) { return t.toUpperCase() });
}
이것을 문자열 프로토 타입에 추가하면 'my string'.toTitle()
다음과 같이 할 수 있습니다 .
String.prototype.toTitle = function() {
return this.replace(/(^|\s)\S/g, function(t) { return t.toUpperCase() });
}
예:
답변
참조 용으로 정규 표현식을 사용하지 않는 경우 :
String.prototype.toProperCase = function() {
var words = this.split(' ');
var results = [];
for (var i = 0; i < words.length; i++) {
var letter = words[i].charAt(0).toUpperCase();
results.push(letter + words[i].slice(1));
}
return results.join(' ');
};
console.log(
'john smith'.toProperCase()
)