Search code examples
javascriptjqueryuppercasecapitalize

How to capitalize each word even after hyphens with Jquery?


I want to capitalize all words in an input (using keyup function) to format names entered.

examples :

john doe => John Doe

JOHN DOE => John Doe

tommy-lee => Tommy-Lee

Currently, I use this code :

$("input").keyup(function() {
    var cp_value= ucwords($(this).val(),true) ;
    $(this).val(cp_value );
});

function ucwords(str,force){
    str=force ? str.toLowerCase() : str;  
    return str.replace(/(\b)([a-zA-Z])/g,
    function(firstLetter){
        return firstLetter.toUpperCase();
    });
}

But if the word contains an accentuated character, the following letter is also uppercased : John Döe => John DöE.

What is the best solution to get what I want ?

Thank you


Solution

  • Problem is with the word boundary if you do a manual boundary it works

    function ucwords(str,force){
        str=force ? str.toLowerCase() : str;
        return str.replace(/(^([a-zA-Z\p{M}]))|([ -][a-zA-Z\p{M}])/g,
        function(firstLetter){
        return firstLetter.toUpperCase();
        });
    }
    

    and adding the Unicode for the accented characters as well