Как сделать заглавной первую букву каждого слова, как город из двух слов?
Мой JS хорошо просыпается, когда в городе есть одно слово:
- cHIcaGO ==> Чикаго
Но когда это
- Сан-Диего ==> Сан-Диего
Как сделать так, чтобы он стал Сан-Диего?
function convert_case() {
document.profile_form.city.value =
document.profile_form.city.value.substr(0,1).toUpperCase() +
document.profile_form.city.value.substr(1).toLowerCase();
}
4 ответа
Решение
Здесь есть хороший ответ:
function toTitleCase(str) {
return str.replace(/\w\S*/g, function(txt){
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
});
}
или в ES6:
var text = "foo bar loo zoo moo";
text = text.toLowerCase()
.split(' ')
.map((s) => s.charAt(0).toUpperCase() + s.substring(1))
.join(' ');
Вы можете использовать CSS:
p.capitalize {text-transform:capitalize;}
function convertCase(str) {
var lower = String(str).toLowerCase();
return lower.replace(/(^| )(\w)/g, function(x) {
return x.toUpperCase();
});
}
Функция JavaScript:
String.prototype.capitalize = function(){
return this.replace( /(^|\s)([a-z])/g , function(m,p1,p2){ return p1+p2.toUpperCase(); } );
};
Чтобы использовать эту функцию:
capitalizedString = someString.toLowerCase().capitalize();
Кроме того, это будет работать с несколькими словами строки.
Чтобы убедиться, что преобразованное название города будет введено в базу данных, в нижнем регистре и с первой буквы в верхнем регистре, вам нужно будет использовать JavaScript, прежде чем отправить его на серверную часть. CSS просто стилизует, но фактические данные останутся предварительно стилизованными. Посмотрите на этот пример jsfiddle и сравните предупреждающее сообщение со стилизованным выводом.