2011-11-30 9 views
36

¿Es posible en Javascript averiguar si la primera letra de una palabra es una letra mayúscula?Compruebe si la primera letra de la palabra es una letra mayúscula

+0

Marque aquí http://stackoverflow.com/questions/1027224/how-can-i-test-if-a-letter-in-a-string-is-uppercase-or-lowercase-using- javascrip – Cyclonecode

+1

EDITAR: Sí. Pruebe '/^[AZ] /. Test (phrase)' ([here] (http://jsfiddle.net/uAwQL/1/)) –

+1

@DavidRodrigues trampa de pozo potencial allí, '[AZ]' no coincide letras mayúsculas acentuadas o no ASCII, vea la nueva respuesta http://stackoverflow.com/a/39292247/568458 – user568458

Respuesta

76
var word = "Someword"; 
console.log(word[0] === word[0].toUpperCase()); 

o

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

o

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

Ver toUpperCase() y test()

+5

+1 para usar la expresión regular – hafichuk

+1

@hafichuk gracias por la edición. Las referencias a la documentación son siempre una mejora. –

+0

Parece que la primera opción es la más rápida. http://jsperf.com/check-capital – Johnston

7

Sí.

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

Recomendado ya que parece funcionar, con una pequeña cantidad de pruebas en Chrome, para caracteres Unicode como "È" (E con una tumba) y "ζ" (zeta no de capital). –

0
var string1 = "this is a string"; 
var string2 = "This is a string"; 

if(string1[0] == string1[0].toUpperCase()) 
    alert('is upper case'); 
else 
    alert('is not upper case'); 


if(string2[0] == string2[0].toUpperCase()) 
    alert('is upper case'); 
else 
    alert('is not upper case'); 
3

Puede hacerlo de varias maneras:

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 */ } 

Tenga en cuenta que el acceso al estilo de matriz a personajes como myWord[0] es una característica de ECMAScript 5 y no admite en los navegadores antiguos, por lo que (por ahora) probablemente recomendaría el método .charAt().

Si lo que necesita hacer esta prueba muchas cosas que usted puede hacer una pequeña función:

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 */ } 
12

Las otras respuestas en esta página están muy bien para las cadenas que se sabe que sólo contenga letras no acentuadas A-Z. Si no puede garantizar esto (por ejemplo, la entrada del usuario), pueden dar resultados inesperados: falsos positivos para iniciales no capitalizables como "1940" o "中文", o falsos negativos para iniciales de capital acentuadas o no romanas como "Łukasz" o " Александра ".

Esta variante devuelve verdadero si el inicial es cualquier letra capital y solamente si se trata de una letra mayúscula:

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

Uso .charAt(0) en lugar de [0]if you need IE8 support. Cuál is faster varies between browsers.

Esto evita dos posibles dificultades con las otras respuestas:

  • expresiones regulares utilizando [A-Z] no se adapte a acentuados y otros similares no AZ en mayúsculas las letras como en Åland (islas escandinavos) y Łukasz (nombre común en polaco), incluidas letras mayúsculas en caracteres no latinos como cirílico o griego (por ejemplo, Александра).

  • El método que utiliza word[0] === word[0].toUpperCase(), volverá cierto en las palabras que empiezan con no letras, tales como , 17a, 123reg (nombre de la empresa), abreviaturas como 2mrw, o algunas palabras algunos idiomas africanos, como ! xūún o ǂǐ-sì. También tratará cualquier entrada de un alfabeto que no tenga letras mayúsculas como letras mayúsculas (p.中文).

Desde este enfoque arbitrario de entrada de seguridad es tan simple y no menos legible que las alternativas, es probablemente mejor usar esto incluso si usted no anticipa tales excepciones.

Aquí es una prueba rápida:

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('Z̢̜̘͇̹̭a͎͚͔͕̩̬̭͈͞l̩̱̼̤̣g̲̪̱̼̘̜͟ợ̮̱͎̗̕ͅͅ', true); // All pass. Phew, Zalgo not awakened

-1
let word = 'Someword'; 
console.log(word.match(new RegExp(/^[A-Z]/)) !== null); 
+0

Esto podría responder la pregunta, pero también proporcione una breve explicación, qué hace su código y por qué soluciona el problema inicial. – user1438038

2

Para Inglés letras únicas:

'A' => 65 
'a' => 97 

Significado, cada número entre [65, 97) es una letra mayúscula:

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