Last Updated: May 22, 2017
·
1.304K
· gentlefox

String.prototype Case Conversions - toTitleCase, toCapitalCase, anyStringToTitleCase.

There are numerous String.prototype code examples for changing case that can be found, yet none seem to address the common issue where the string input is in all-capitals and is needed to output as "Capital case" or "Title Case" - the examples I've seen will simply result in returning the string still as all-caps.

Have chosen to follow the String nomenclature convention as described by .toLowerCase() and .toUpperCase().

.toCapitalCase()

/* string.toCapitalCase()
  Handles inputs:
    UPPERCASE, "space separated".
  eg: 'STRING TO CONVERT'.toCapitalCase()  returns: 'String to convert'
 */
String.prototype.toCapitalCase = function() {
  return this.charAt(0).toUpperCase() + this.slice(1).toLowerCase();
};

.toTitleCase()

/* string.toTitleCase()
  Handles inputs:
    UPPERCASE, "space separated".
  eg: 'STRING TO CONVERT'.toTitleCase() returns: 'String To Convert'
 */
String.prototype.toTitleCase = function() {
  return this.split(' ')
             .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
             .join(' ');
};

.anyStringToTitleCase()

/* string.anyStringToTitleCase()
  Handles inputs:
    "space separated", camelCase, ClassCase, UPPERCASE, snake_case, dash-case, object.case.
  eg: 'string-toConvert_has a.very ComplexStructure'.anyStringToTitleCase()
    returns: 'String To Convert Has A Very Complex Structure'
 */
const STRING_DECAMELIZE_REGEXP = (/([a-z\d])([A-Z])/g);
const STRING_SEPARATORS_REGEXP = (/(\-|\_|\.)/g);

String.prototype.anyStringToTitleCase = function() {
  return this.replace(STRING_DECAMELIZE_REGEXP, '$1 $2')
             .replace(STRING_SEPARATORS_REGEXP, ' ')
             .split(' ')
             .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
             .join(' ');
};