Convert string to title case with JavaScript

后端 未结 30 2926
夕颜
夕颜 2020-11-21 06:40

Is there a simple way to convert a string to title case? E.g. john smith becomes John Smith. I\'m not looking for something complicated like John R

30条回答
  •  时光取名叫无心
    2020-11-21 07:35

    Here’s my function that converts to title case but also preserves defined acronyms as uppercase and minor words as lowercase:

    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;
    }
    

    For example:

    "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:"
    

提交回复
热议问题