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(); }); }
3 Réponses :
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(' '); }
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.
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(); }); }
Utilisez celui-ci:
console.log(ucwords('JOHN DOE'), ucwords('tommy-lee'), ucwords('TOMMY-lee'), ucwords('John Döe'));
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 ('') code>