// includeAllCaps is optional and defaults to false
// if includeAllCaps is set to true, it will Title Case words with all capital letters
// includeMinorWords is optional and defaults to false
// if includeMinorWords is set to true, it will minor words in the middle of the string
function toTitleCase(str, includeAllCaps, includeMinorWords) {
includeAllCaps = (includeAllCaps ? (includeAllCaps == true ? true : false) : false);
includeMinorWords = (includeMinorWords ? (includeMinorWords == true ? true : false) : false);
var i, j, lowers;
str = str.replace(/([^W_]+[^s-]*) */g, function (txt) {
if (!/[a-z]/.test(txt) && /[A-Z]/.test(txt) && !includeAllCaps) {
return txt;
} else {
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
}
});
if (includeMinorWords) {
return str;
} else {
// 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();
});
return str;
}
}
toTitleCase("FOO bar"); // FOO Bar
toTitleCase("FOO bar", true); // Foo Bar
toTitleCase("a foo bar"); // A Foo Bar
toTitleCase("a foo in bar"); // A Foo in Bar
toTitleCase("foo of bar"); // Foo of Bar
toTitleCase("foo of bar", false, true); // Foo Of Bar