Как загладить первую букву каждого слова, как город из двух слов?

My 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();
}

Ответ 1

Там хороший ответ здесь:

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(' ');

Ответ 2

Вы можете использовать CSS:

p.capitalize {text-transform:capitalize;}

Обновление (решение JS):

Основано на комментарии Камала Редди:

document.getElementById("myP").style.textTransform = "capitalize";

Ответ 3

function convertCase(str) {
  var lower = String(str).toLowerCase();
  return lower.replace(/(^| )(\w)/g, function(x) {
    return x.toUpperCase();
  });
}

Ответ 4

Функция 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 и сравните предупреждающее сообщение со стилизованным выводом.