Como posso testar se uma letra de uma string está em maiúsculas ou minúsculas usando JavaScript?
javascript
Joe
fonte
fonte
[:upper:]
) é rápida e muito legal, exceto que não funciona, veja meu comentário abaixo e meu jsperf.com/isupper-comparison/7 corrigido .str == str.toUpperCase();
retorna verdadeiro ou falsoRespostas:
A resposta de josh e maleki retornará true em maiúsculas e minúsculas se o caractere ou a sequência inteira for numérica. tornando o resultado um resultado falso. exemplo usando josh
outra maneira é testá-lo primeiro se for numérico; caso contrário, teste se estiver em maiúsculas ou minúsculas
fonte
!
são numéricos.var character='';
fonte
Isso registrará true se o caractere estiver em maiúscula e registrará false em todos os outros casos:
Você pode testá-lo aqui: http://jsfiddle.net/Axfxz/ (use Firebug ou sth).
e isso é para letras minúsculas :).
fonte
O problema com as outras respostas é que alguns caracteres como números ou pontuação também retornam true quando marcados em minúsculas / maiúsculas.
Eu achei que isso funcionava muito bem para isso:
Isso funcionará para pontuação, números e letras:
Para verificar uma letra, basta chamá-la usando
isLowerCase(str[charIndex])
fonte
então :
fonte
Você pode utilizar um teste de expressão regular e o
toUpperCase
método:Veja também
fonte
&& chr === chr.toUpperCase();
??\u0080-\u024F
pode conter diacríticos em minúsculas; portanto, o teste também deve verificar o próprio caractere.fonte
Mais especificamente ao que está sendo solicitado. Passe uma String e uma posição para verificar. Muito perto de Josh, exceto que este irá comparar uma cadeia maior. Teria adicionado como um comentário, mas ainda não tenho essa capacidade.
fonte
Você também pode usar uma expressão regular para detectar explicitamente caracteres alfabéticos romanos em maiúsculas.
EDIT: a função acima está correta para ASCII / Basic Latin Unicode, que provavelmente é tudo com o que você se preocupará. A versão a seguir também suporta o suplemento Latin-1 e os blocos Unicode grego e copta ... Caso você precise disso por algum motivo.
Essa estratégia começa a cair se você precisar de mais suporte (está em maiúsculas?), Pois alguns blocos misturam caracteres maiúsculos e minúsculos.
fonte
.toLowerCase()
ou.toUpperCase()
é preferida, pois suporta internamente a maioria das localidades.Uma boa resposta para essa pergunta deve ser sucinta, manipular o unicode corretamente e lidar com cadeias de caracteres vazias e nulos.
Essa abordagem lida com cadeias vazias e nulos primeiro e, em seguida, garante que a conversão da cadeia especificada em minúsculas mude sua igualdade. Isso garante que a sequência contenha pelo menos uma letra maiúscula de acordo com as regras de capitalização do local atual (e não retornará falsos positivos para números e outros glifos que não possuem capitalização).
A pergunta original foi feita especificamente sobre o teste do primeiro personagem. Para manter seu código simples e claro, eu separaria o primeiro caractere da string separadamente para testar se é maiúsculo.
fonte
Há uma resposta muito simples, que ninguém mais mencionou:
Se
str.toUpperCase()
não retornar o mesmostr
, deverá ser minúsculo. Para testar maiúsculas, altere-o parastr !== str.toLowererCase()
.Diferentemente de outras respostas, ele funciona corretamente em caracteres não-alfa (retornos
false
) e em outros alfabetos, caracteres acentuados etc.fonte
"É"
não é minúscula.fonte
return (ch.charCodeAt() >= 65 && ch.charCodeAt() <= 90)
.A melhor maneira é usar uma expressão regular, um operador ternário e o
.test()
método interno para strings.Deixo para o Google os detalhes de expressões regulares e o método de teste para strings (são fáceis de encontrar), mas aqui vamos usá-lo para testar sua variável.
Isso retornará VERDADEIRO de FALSO, com base no fato de seu personagem corresponder ou não ao conjunto de caracteres na expressão regular. Nossa expressão regular verifica todas as letras az,
/[a-z]/
independentemente do caso, graças ài
bandeira.Portanto, um teste básico seria:
Agora precisamos determinar se é maiúsculo ou minúsculo. Portanto, se removermos o
i
sinalizador de nossa expressão regular, nosso código acima testará as letras minúsculas az. E se mantivermos outraif
declaração naelse
primeiraif
, poderemos testar também maiúsculas usando AZ. Como isso:E, caso não seja uma carta, podemos adicionar uma declaração final else:
O código acima funcionaria. Mas é meio feio. Em vez disso, podemos usar um "operador ternário" para substituir nossas
if-else
declarações acima. Os operadores ternários são apenas maneiras simples de codificar umif-else
. A sintaxe é fácil:E eles também podem ser aninhados um no outro. Portanto, uma função pode se parecer com:
O código acima parece bom, mas não funciona muito bem, porque se nosso caractere estiver em minúsculas, ele
theAnswer
será definido como "" quando testar maiúsculas, então vamos aninhar:Isso vai funcionar muito bem! Mas não há necessidade de ter duas linhas separadas para definir a variável
theAnswer
e depois devolvê-la. E devemos usá-lolet
econst
nãovar
(procure-os se não tiver certeza do porquê). Depois de fazer essas alterações:E acabamos com um pedaço de código conciso e elegante. ;)
fonte
Esta é uma solução simples e legível usando um regex simples.
fonte
Você pode testar se sua matriz possui uma sequência maiúscula ou minúscula usando o método de correspondência e a expressão regular. Abaixo está apenas uma base básica para iniciar seu teste
fonte
Você também pode usar isso, ele verificará a seqüência de caracteres em maiúsculas e minúsculas
fonte
Isso verifica a seqüência INTEIRA, não apenas a primeira letra. Eu pensei em compartilhar com todos aqui.
Aqui está uma função que usa uma expressão regular para testar as letras de uma string; retorna true se a letra estiver em maiúsculas (AZ). Em seguida, reduzimos o array verdadeiro / falso para um único valor. Se for igual ao comprimento da sequência, isso significa que todas as letras passaram no teste regex, o que significa que a sequência está em maiúsculas. Caso contrário, a sequência será minúscula.
fonte
Foi assim que fiz recentemente:
1) Verifique se um char / string
s
está em minúsculass.toLowerCase() == s && s.toUpperCase() != s
2) O cheque
s
está em maiúsculass.toUpperCase() == s && s.toLowerCase() != s
Abrange casos em que
s
contém caracteres não alfabéticos e diacríticos.fonte
Defina uma função checkCharType (). Declarando a variável returnValue e inicializando-a com o caractere "O" para indicar que é algum outro valor.
U para maiúsculas; L para minúsculas; N para número
Use o método charCodeAt () para obter o código de caractere do primeiro caractere.
Using if Statement, que verifica dentro de qual intervalo de valores o código de caractere cai.
Se estiver entre os códigos de caracteres de A e Z, em maiúsculas, o código de caracteres entre a e z, em minúsculas. e assim por diante.
"A" .charCode (0)
var myChar = new String ("A"); myChar.charCodeAt (0); "A": código numérico "65"
fonte
Esta pergunta foi claramente respondida várias vezes, mas pensei em compartilhar minha solução, pois não a vi nas respostas dadas.
2 ¢
fonte
Veja meu comentário sobre a resposta escolhida. Outras soluções que limitam a tabela ASCII ou usam os literais de caracteres reais ignoram completamente o Unicode e as centenas de outros caracteres que possuem maiúsculas e minúsculas.
Este código definirá a variável caseGroup para:
0 para Without Case
Você poderia assar isso em algo assim ...
fonte
Baseado no comentário de Sonic Beard à resposta principal. Mudei a lógica no resultado:
0: minúsculas
1 letra maiúscula
-1: nem
fonte
Outra maneira é comparar o personagem com um objeto vazio, eu realmente não sei por que ele funciona, mas funciona:
então em uma função:
EDIT : não funciona com acentos e diacríticos, por isso é possível removê-lo
fonte
[object Object]
. Você está basicamente verificando se o código de caractere da letra vem antes[
. Como os códigos de caracteres paraZ, [, a
são90, 91, 97
respectivamente, a comparação é verdadeira para letras maiúsculas e falsa para letras minúsculas. Em outras palavras, é uma maneira igualmente hacky de fazer isso usando números da base 36 para obter as letras do alfabeto.character.normalize("NFD").replace(/[\u0300-\u036f]/g
Assumindo que uma string é considerada apenas não todas maiúscula se pelo menos uma letra minúscula estiver presente, isso funciona bem. Eu entendo que não é conciso e sucinto como todo mundo tentou fazer, mas funciona =)
fonte
Um que eu uso (observe que isso não cria "TestString" como "Test String" ou "Test String").
fonte
Preciso testar contra uma sequência de qualquer caractere (incluindo espaço em branco, marcas, números, caracteres unicode ...). Como espaço em branco, números, marcas ... serão os mesmos em maiúsculas e minúsculas e eu quero encontrar letras maiúsculas reais, faço o seguinte:
fonte
Basta verificar o valor ASCII
fonte
A função de Stephen Nelsons foi convertida em um protótipo com muitos exemplos de teste.
Também adicionei cadeias inteiras à função para completar.
Veja o código para comentários adicionais.
fonte
fonte
fonte