Quelle est la meilleure approche pour capitaliser des mots dans une chaîne?
- Convertir une chaîne en casse-titre avec JavaScript (5 réponses )
Réponses
Trop de publicités? String.prototype.capitalize = function() {
return this.replace(/(?:^|\s)\S/g, function(a) { return a.toUpperCase(); });
};
Usage:
'your string'.capitalize(); // -> 'Your String'
-
corrige la solution de Marco Demaio où la première lettre précédée d'un espace n'est pas en majuscule.
' javascript'.capitalize(); // -> ' Javascript'
-
peut gérer les symboles nationaux et les lettres accentuées.
'бабушка курит трубку'.capitalize(); // -> 'Бабушка Курит Трубку' 'località àtilacol'.capitalize() // -> 'Località Àtilacol'
ADD-ON je le trouve utile
String.prototype.capitalize = function(lower) {
return (lower ? this.toLowerCase() : this).replace(/(?:^|\s)\S/g, function(a) { return a.toUpperCase(); });
};
'javaSCrIPT'.capitalize(); // -> 'JavaSCrIPT'
'javaSCrIPT'.capitalize(true); // -> 'Javascript'
function capitalize(s){
return s.toLowerCase().replace( /\b./g, function(a){ return a.toUpperCase(); } );
};
capitalize('this IS THE wOrst string eVeR');
sortie: "C'est la pire chaîne de tous les temps"
Mettre à jour:
Il semble que cette solution remplace la mienne: http://stackoverflow.com/a/7592235/104380
La réponse fournie par le vsync fonctionne aussi longtemps que vous n'avez pas de lettres accentuées dans la chaîne d'entrée.
Je ne sais pas la raison, mais apparemment l' \b
dans regexp correspond également les lettres accentuées (testé sur IE8 et Chrome), de sorte que la chaîne "località"
serait à tort capitalisés converti en "LocalitÀ"
(le à
lettre est en majuscule cause de la regexp pense que c'est une limite de mot)
Un cadre plus général de la fonction qui fonctionne aussi avec les lettres accentuées est celui-ci:
String.prototype.toCapitalize = function()
{
return this.toLowerCase().replace(/^.|\s\S/g, function(a) { return a.toUpperCase(); });
}
Vous pouvez l'utiliser comme ceci:
alert( "hello località".toCapitalize() );
Puisque tout le monde vous a donné la réponse JavaScript que vous avez demandée, je précise que la propriété CSS text-transform: capitalize
fera exactement cela.
Je me rends compte que ce n'est peut- être pas ce que vous demandez - vous ne nous avez pas décrit le contexte dans lequel vous l'exécutez - mais si c'est juste pour la présentation, je choisirais certainement l'alternative CSS.
John Resig (de jQuery fame ) adapté un script perl, écrit par John Gruber, JavaScript. Ce script capitalise d'une manière plus intelligente, il ne capitalise pas les petits mots comme " de " et "et", par exemple.
Vous pouvez le trouver ici: Titre de la Capitalisation dans le JavaScript