Majuscule des mots dans la chaîne
Quelle est la meilleure approche pour capitaliser des mots dans une chaîne?
16 réponses
l'implémentation la plus courte pour capitaliser des mots dans une chaîne est la suivante en utilisant les fonctions de flèche de ES6:
'your string'.replace(/\b\w/g, l => l.toUpperCase())
// => 'Your String'
mise en œuvre compatible ES5:
'your string'.replace(/\b\w/g, function(l){ return l.toUpperCase() })
// => 'Your String'
le regex correspond essentiellement à la première lettre de chaque mot dans la chaîne donnée et transforme seulement cette lettre en majuscule:
- \b correspond à une limite de mots (le début ou la fin de
- \w correspond au méta-caractère suivant [A-zA-Z0-9].
Pour les caractères non-ASCII reportez-vous à cette solution au lieu de
'ÿöur striñg'.replace(/(^|\s)\S/g, l => l.toUpperCase())
ce regex correspond à la première lettre et à toutes les lettres non blanches précédées de blancs dans la chaîne donnée et ne transforme que cette lettre en majuscule:
- \s correspond à un caractère d'espace
- \s correspond à un caractère non-blanc
- (x|y) correspond à l'une des variantes spécifiées
un groupe non capturable aurait pu être utilisé ici comme suit /(?:^|\s)\S/g
bien que le drapeau g
dans notre regex ne capturera pas les sous-groupes de toute façon.
santé!
String.prototype.capitalize = function() {
return this.replace(/(?:^|\s)\S/g, function(a) { return a.toUpperCase(); });
};
Utilisation:
'your string'.capitalize(); // -> 'Your String'
-
fixe Marco Demaio ' s solution où la première lettre avec un espace précédent n'est pas capitalisé.
' javascript'.capitalize(); // -> ' Javascript'
-
peut manipuler des symboles nationaux et des lettres accentuées.
'бабушка курит трубку'.capitalize(); // -> 'Бабушка Курит Трубку' 'località àtilacol'.capitalize() // -> 'Località Àtilacol'
ADD-ON Je trouve ça 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');
"151910920 de sortie": "C'Est La Pire Chaîne de Toujours"
mise à jour:
il semble que cette solution remplace la mienne: https://stackoverflow.com/a/7592235/104380
Le réponse fournie par le vsync œuvres tant que vous n'avez pas de lettres accentuées dans la chaîne d'entrée.
Je ne sais pas la raison, mais apparemment le \b
dans regexp correspond aussi lettres accentuées (testé sur IE8 et Chrome), de sorte qu'une chaîne de caractères comme "località"
serait à tort capitalisé converti en "LocalitÀ"
(la lettre à
obtient capitalisé cause regexp pense que c'est une limite de mot)
une fonction plus générale que fonctionne aussi avec des 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() );
John Resig (de jQuery fame ) a porté un script perl, écrit par John Gruber, en 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
puisque tout le monde vous a donné la réponse JavaScript que vous avez demandé, je vais jeter dans que la propriété CSS text-transform: capitalize
fera exactement cela.
je réalise que ce pourrait ne pas être ce que vous demandez - vous ne nous avez pas donné tout du contexte dans lequel vous exécutez ceci - mais si c'est juste pour la présentation, je serais certainement aller avec l'alternative CSS.
utilisant JavaScript et html
String.prototype.capitalize = function() {
return this.replace(/(^|\s)([a-z])/g, function(m, p1, p2) {
return p1 + p2.toUpperCase();
});
};
<form name="form1" method="post">
<input name="instring" type="text" value="this is the text string" size="30">
<input type="button" name="Capitalize" value="Capitalize >>" onclick="form1.outstring.value=form1.instring.value.capitalize();">
<input name="outstring" type="text" value="" size="30">
</form>
en gros, vous pouvez faire string.capitalize()
et il capitalisera chaque première lettre de chaque mot.
Source: http://www.mediacollege.com/internet/javascript/text/case-capitalize.html
si vous utilisez lodash dans votre application JavaScript, vous pouvez utiliser _.majuscule :
console.log( _.capitalize('ÿöur striñg') );
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.min.js"></script>
ma solution:
String.prototype.toCapital = function () {
return this.toLowerCase().split(' ').map(function (i) {
if (i.length > 2) {
return i.charAt(0).toUpperCase() + i.substr(1);
} else {
return i;
}
}).join(' ');
};
exemple:
'álL riGht'.toCapital();
// Returns 'Áll Right'
cela devrait couvrir la plupart des cas d'utilisation de base.
const capitalize = (str) => {
if (typeof str !== 'string') {
throw Error('Feed me string')
} else if (!str) {
return ''
} else {
return str
.split(' ')
.map(s => {
if (s.length == 1 ) {
return s.toUpperCase()
} else {
const firstLetter = s.split('')[0].toUpperCase()
const restOfStr = s.substr(1, s.length).toLowerCase()
return firstLetter + restOfStr
}
})
.join(' ')
}
}
capitalize('THIS IS A BOOK') // => This Is A Book
capitalize('this is a book') // => This Is A Book
capitalize('a 2nd 5 hour boOk thIs weEk') // => A 2nd 5 Hour Book This Week
modifier: amélioration de la lisibilité de la cartographie.
http://www.mediacollege.com/internet/javascript/text/case-capitalize.html est l'une des nombreuses réponses.
Google peut être tout ce dont vous avez besoin pour de tels problèmes.
une approche naïve serait de diviser la chaîne par des espaces, de capitaliser la première lettre de chaque élément du tableau résultant et de la joindre à nouveau ensemble. Cela laisse les majuscules existantes seules (par ex. HTML reste HTML et ne devient pas quelque chose stupide comme le Html). Si vous ne voulez pas que l'affect, tourner la chaîne entière en minuscules avant de la diviser.
ce code majuscule mots après point:
function capitalizeAfterPeriod(input) {
var text = '';
var str = $(input).val();
text = convert(str.toLowerCase().split('. ')).join('. ');
var textoFormatado = convert(text.split('.')).join('.');
$(input).val(textoFormatado);
}
function convert(str) {
for(var i = 0; i < str.length; i++){
str[i] = str[i].split('');
if (str[i][0] !== undefined) {
str[i][0] = str[i][0].toUpperCase();
}
str[i] = str[i].join('');
}
return str;
}
j'aime aller avec le processus facile. Changez d'abord la chaîne de caractères en tableau pour une itération facile, puis en utilisant la fonction map, changez chaque mot comme vous le voulez.
function capitalizeCase(str) {
var arr = str.split(' ');
var t;
var newt;
var newarr = arr.map(function(d){
t = d.split('');
newt = t.map(function(d, i){
if(i === 0) {
return d.toUpperCase();
}
return d.toLowerCase();
});
return newt.join('');
});
var s = newarr.join(' ');
return s;
}
Jquery ou Javascipt n'est pas de fournir une méthode intégrée pour atteindre cet objectif.
CSS test transform (text-transform: capitaliser;) ne capitalise pas vraiment les données de la chaîne, mais montre un rendu capitalisé sur l'écran.
si vous cherchez une façon plus légitime d'atteindre ce niveau de données en utilisant des vanillaJS simples, utilisez cette solution =>
var capitalizeString = function (word) {
word = word.toLowerCase();
if (word.indexOf(" ") != -1) { // passed param contains 1 + words
word = word.replace(/\s/g, "--");
var result = $.camelCase("-" + word);
return result.replace(/-/g, " ");
} else {
return $.camelCase("-" + word);
}
}
Utilisez Ceci:
String.prototype.toTitleCase = function() {
return this.charAt(0).toUpperCase() + this.slice(1);
}
let str = 'text';
document.querySelector('#demo').innerText = str.toTitleCase();
<div class = "app">
<p id = "demo"></p>
</div>
vous pouvez utiliser ce qui suit pour capitaliser des mots dans une chaîne de caractères:
function capitalizeAll(str){
var partes = str.split(' ');
var nuevoStr = "";
for(i=0; i<partes.length; i++){
nuevoStr += " "+partes[i].toLowerCase().replace(/\b\w/g, l => l.toUpperCase()).trim();
}
return nuevoStr;
}