7
votes

Comment capitaliser chaque mot même après des traits d'union avec jQuery?

Je veux capitaliser tous les mots dans une entrée (à l'aide de la fonction de connexion) pour formater les noms entrés.

Exemples: P>

John Doe => John Doe P>

John Doe => John Doe P>

Tommy-Lee => Tommy-Lee P>

Actuellement, j'utilise ce code: P>

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


2 commentaires

Ce n'est pas réellement un problème de jQuery car il est mieux résolu en utilisant un JS plain. Voir ma réponse ci-dessous.


str.split (/ (\ s | -) + /). Carte (Fonction (V, I) {Retour V.charat (0) .TUPPERCASE () + V.Slice (1) .tolowercase (); }). rejoindre ('')


3 Réponses :


0
votes

Vous pouvez faire quelque chose comme celui-ci après la division des touches, puis obtenez le FIFRT CHART et majuscule, puis rejoignez tout. Vous pouvez vérifier ce lien que j'ai écrit une démo pour vous http://jsfiddle.net/vbx3x/5/

function ucwords(str,force){
 str=force ? str.toLowerCase() : str;  

 var temp= str.split(/(\s|-)+/);
for(var i=0; i<temp.length; i++) {
  temp[i] = temp[i].substr(0,1).toUpperCase() + temp[i].substr(1,temp[i].length-1)
}
 return temp.join(' ');  
}


3 commentaires

Selon la question de l'OP, cela ne capitalisera pas le personnage après un trait d'union


Merci pour votre réponse. Cela fonctionne bien pour des caractères spéciaux, mais plus pour les lettres après le trait d'union (cf.: jsfiddle.net/vbx3x/ 5 )


J'ai mis à jour la partie scindée, je n'ai pas vu les autres personnages, "- |", etc. C'est OK maintenant, vous pouvez le tester.



9
votes

Problème est avec la limite de mot si vous faites une limite manuelle, cela fonctionne

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


0 commentaires

4
votes

Utilisez celui-ci:

console.log(ucwords('JOHN   DOE'),
            ucwords('tommy-lee'),
            ucwords('TOMMY-lee'),
            ucwords('John Döe'));


0 commentaires