Existe-t-il un moyen intégré à jQuery pour "mettre en majuscule" une chaîne de caractères ? Ainsi, si l'on donne quelque chose comme "bob smith", cela devient "Bob Smith" ?
Réponses
Trop de publicités?Est beaucoup plus simple...
Vous devez utiliser un callback dans le remplacement.
toCamelCase = function(str){
return str.replace(/-\w/g,function(match){return match[1].toUpperCase()})
}
// this works for css properties with "-"
// -webkit-user-select => WebkitUserSelect
Vous pouvez changer le RegExp en /[-]. \s ] \w /g ou /(^|[- \s ]) \w /g ou autre...
Je sais que cette question est un peu ancienne mais..,
Voici ma version de la fonction camelCase :
var camelCase = (function () {
var DEFAULT_REGEX = /[-_]+(.)?/g;
function toUpper(match, group1) {
return group1 ? group1.toUpperCase() : '';
}
return function (str, delimiters) {
return str.replace(delimiters ? new RegExp('[' + delimiters + ']+(.)?', 'g') : DEFAULT_REGEX, toUpper);
};
})();
Il gère tous les cas limites suivants :
- prend en charge les traits de soulignement et les traits d'union par défaut (configurable avec le deuxième paramètre).
- chaîne de caractères unicode
- chaîne de caractères qui se termine par un trait d'union ou un trait de soulignement
- chaîne de caractères comportant des traits d'union ou des caractères de soulignement consécutifs
Voici un lien vers les tests en direct : http://jsfiddle.net/avKzf/2/
Voici les résultats des tests :
- l'entrée : "ab-cd-ef", résultat : "abCdEf"
- l'entrée : "ab-cd-ef-", résultat : "abCdEf"
- l'entrée : "ab-cd-ef--", résultat : "abCdEf"
- l'entrée : "ab-cd--ef--", résultat : "abCdEf"
- l'entrée : "--ab-cd--ef--", résultat : "AbCdEf"
- l'entrée : "--ab-cd-__-ef--", résultat : "AbCdEf"
Notez que les chaînes de caractères qui commencent par des délimiteurs auront pour résultat une lettre majuscule au début. Si ce n'est pas ce que vous attendez, vous pouvez toujours utiliser lcfirst. Voici mon lcfirst si vous en avez besoin :
function lcfirst(str) {
return str && str.charAt(0).toLowerCase() + str.substring(1);
}