61 votes

Vérifier si la première lettre du mot est une majuscule

Est-il possible en JavaScript de savoir si la première lettre d'un mot est une majuscule ?

0 votes

1 votes

EDIT : Oui. Essayez /^[A-Z]/.test(phrase) ( aquí )

1 votes

@DavidRodrigues piège potentiel là, [A-Z] ne correspond pas aux lettres majuscules accentuées ou non ASCII, voir nouvelle réponse stackoverflow.com/a/39292247/568458

115voto

Gaby aka G. Petrioli Points 85891
var word = "Someword";
console.log( word[0] === word[0].toUpperCase() );

ou

var word = "Someword";
console.log( /[A-Z]/.test( word[0]) );

o

var word = "Someword";
console.log( /^[A-Z]/.test( word) );

Ver toUpperCase() y test()

0 votes

@Johnston : Il semble que vous interprétez mal les résultats de jsperf. La dernière option (/^[A-Z]/.test( word) ) semble être la plus rapide. Vérifiez le test. Plus la valeur est élevée, mieux c'est.

1 votes

@Pratham Cela dépend de l'ordinateur qui l'exécute. Mais voici une capture d'écran de ce à quoi mes résultats ressemblent. imgur.com/nv4nBE7 . Il est dit que la version en majuscules fait 13m ops/sec tandis que l'autre fait 5m ops/sec. Il est également indiqué sur le mien que le regex est 60% plus lent. Est-ce que je lis mal ?

1 votes

@Johnston : Résultat du navigateur Firefox : imgur.com/1quk2fe . Il semble que le navigateur affecte les performances

34voto

user568458 Points 3511

Les autres réponses de cette page conviennent aux chaînes de caractères dont on sait qu'elles ne contiennent que des lettres A-Z non accentuées. Si vous ne pouvez pas le garantir (par exemple, par la saisie de l'utilisateur), elles peuvent donner des résultats inattendus : faux positifs pour des initiales non capitalisables comme "1940s" ou "", ou faux négatifs pour des initiales capitales accentuées ou non romaines comme "ukasz" ou "".

Cette variante retourne vrai si l'initiale est cualquier lettre majuscule, et uniquement si c'est une lettre majuscule :

function initialIsCapital( word ){
  return word[0] !== word[0].toLowerCase();
}

Utilisez .charAt(0) au lieu de [0] si vous avez besoin du support d'IE8 . Quel est plus rapide varie selon les navigateurs .

Cela permet d'éviter deux écueils potentiels avec les autres réponses :

  • Regex utilisant [A-Z] ne parviendra pas à faire correspondre les lettres accentuées et autres lettres capitales similaires non-A-Z comme dans Åland (îles scandinaves) et ukasz (nom polonais commun), y compris les lettres majuscules dans les écritures non latines telles que le cyrillique ou le grec (par ex. ).

  • L'approche utilisant word[0] === word[0].toUpperCase() retournera vrai sur les mots qui commencent par des lettres, tels que 1940s , 17ème , 123reg (nom de la société), des abréviations comme 2mrw ou certains mots dans certaines langues africaines, tels que !xún o i-si . Il traitera également toute entrée provenant d'un alphabet qui n'a pas de majuscules comme étant des majuscules (par ex. ).

Puisque cette approche de sécurité des entrées arbitraires est aussi simple et aussi lisible que les autres, il est probablement préférable de l'utiliser même si vous ne prévoyez pas de telles exceptions.

Voici un test rapide :

function a(word){
  return word[0] !== word[0].toLowerCase();
}
function b(word){
  return word[0] === word[0].toUpperCase();
}
function c(word){
  return /^[A-Z]/.test( word );
}
function test(word, answer){
  console.log( 'Should be '+answer+':',  a(word), b(word), c(word), '-------', word );
}

test( 'ukasz', true ); // regex test fails, returns false
test( '', true ); // regex test fails, returns false
test( '1940s', false ); // .toUpperCase() test fails, returns true
test( '', false ); // .toUpperCase() test fails, returns true

test( 'ß', false ); // All pass on German "sharp S" that has no uppercase
test( 'Zalgo', true ); // All pass. Phew, Zalgo not awakened

12voto

please delete me Points 206

Pour Anglais lettres uniquement :

'A' => 65
'Z' => 90

Ce qui signifie que tous les chiffres entre [65, 90] sont des majuscules :

function startsWithCapitalLetter(word) {
  return word.charCodeAt(0) >= 65 && word.charCodeAt(0) <= 90;
}

8voto

Mike Christensen Points 29735

Oui.

var str = "Hello";
if(str[0].toUpperCase() == str[0])
{
   window.alert('First character is upper case.');  
}

1 votes

Recommandé car cela semble fonctionner, avec une petite quantité de tests dans Chrome, pour les caractères Unicode comme "È" (E avec une grave) et "" (zeta non majuscule).

5voto

nnnnnn Points 70578

Vous pouvez le faire de plusieurs façons :

var myWord = "Hello";

// with string functions
if (myWord.charAt(0) === myWord.charAt(0).toUpperCase()) { /* is upper */ }

// or for newer browsers that support array-style access to string characters
if (myWord[0] === myWord[0].toUpperCase()) { /* is upper */ }

// with regex - may not be appropriate for non-English uppercase
if (/^[A-Z]/.test(myWord) { /* is upper */ }

Notez que l'accès de type tableau à des caractères comme myWord[0] est une fonctionnalité d'ECMAScript 5 et n'est pas prise en charge par les anciens navigateurs, donc (pour l'instant) je recommanderais probablement l'option .charAt() méthode.

Si vous avez besoin de faire ce test souvent, vous pouvez créer une petite fonction :

function firstLetterIsUpper(str) {
   var f = str.charAt(0);   // or str[0] if not supporting older browsers
   return f.toUpperCase() === f;
}

if (firstLetterIsUpper(myWord)) { /* do something */ }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X