Como verificar se o caractere é uma letra em Javascript?

99

Estou extraindo um caractere em uma string Javascript com:

var first = str.charAt(0);

e gostaria de verificar se é uma carta. Estranhamente, não parece que tal funcionalidade exista em Javascript. Pelo menos não consigo encontrar.

Como posso testar isso?

Jérôme Verstrynge
fonte
4
Criar um número e testar NaN? Ou apenas isNan(first)acho.
Marc
6
@Marc Se este caractere fosse '-' por exemplo, seu teste não indicaria que é uma letra ...
Jérôme Verstrynge
2
Definir "carta"? Alfa em inglês apenas ou algo mais? Você quer "colocar na lista negra" ou "lista branca"?
Wesley Murch,
3
@JVerstry nem todo mundo conhece Java. Você não pode simplesmente nos dizer quais personagens serão permitidos?
PeeHaa
1
Vejo muitas pessoas chamando JS Java aqui. JS e Java não são a mesma coisa, nem perto disso. Um é essencialmente um brinquedo, o outro é para fazer sites.
Ian Wise

Respostas:

16

Acredito que este plug-in tem os recursos que você procura: http://xregexp.com/plugins/ (link do github: https://github.com/slevithan/xregexp )

Com ele, você pode simplesmente combinar todas as letras Unicode com \p{L}.

Leia o cabeçalho deste arquivo de origem para ver quais categorias ele suporta: http://xregexp.com/plugins/xregexp-unicode-categories.js

bezmax
fonte
1
Você tem experiência no uso deste plugin em projetos em que trabalhou? (apenas me perguntando o quão confiável esta biblioteca é)
Adrien Be
downvoting, pois esta é certamente uma resposta ruim para 2019
Peter
6
@Peter Você poderia vincular uma resposta que considera adequada para 2019? Eu adicionaria um link para ele como uma edição para minha resposta, desde que a outra solução funcione com todos os caracteres Unicode.
bezmax
148

Não acredito que haja uma função embutida para isso. Mas é fácil escrever com um regex

function isLetter(str) {
  return str.length === 1 && str.match(/[a-z]/i);
}
JaredPar
fonte
50
O código testa apenas se o caractere é uma das letras básicas de a a z (muito poucos idiomas são escritos usando apenas essas letras). Isso é muito diferente da função Java que foi mencionada.
Jukka K. Korpela
11
Você ainda pode usar uma regex e apenas adicionar mais detalhes conforme necessário: str.match (/ [AZ | az | ü | é] / i); // etc
Eli
2
@YiboYang - não, acessei o link jsbin acima, mudei para o seu e o executei, e obteve isto: "é 'u' é uma letra? Verdadeiro" "é 'ü' é uma letra? Falso" "é 'à 'é uma letra? false "Com o seu código.
Julix
3
Deve-se notar que isso não retorna verdadeiro || falso como se poderia esperar. Se strfor um valor de az, ele retornará esse valor. Caso contrário, ele retorna nulo. Se você precisar que ele retorne verdadeiro / falso, use isso. isLetter: function (str) { if (str.length !== 1 && str.match(/[a-z]/i)) { return true; } return false; },
Regis de
1
Entãããão os resultados disso não retornaram um valor verdadeiro ou falso, que é tudo que me preocupa ... o que pode ser feito simplesmente mudando return str.length === 1 && str.match(/[a-z]/i);para return str.length === 1 && !!str.match(/[a-z]/i);. Se isso for algo que você gostaria de incorporar à sua resposta. Mesmo assim, votado positivamente.
ShanerM13,
110

Com relação a esses caracteres especiais não sendo levados em consideração por verificações mais simples, como /[a-zA-Z]/.test(c), pode ser benéfico alavancar a transformação de maiúsculas e minúsculas do ECMAScript ( toUpperCase). Ele levará em consideração classes de caracteres Unicode não ASCII de alguns alfabetos estrangeiros.

function isLetter(c) {
  return c.toLowerCase() != c.toUpperCase();
}

NOTA: esta solução funcionará apenas para a maioria dos scripts latinos, gregos, armênios e cirílicos. NÃO funcionará para chinês, japonês, árabe, hebraico e a maioria dos outros scripts.

filip
fonte
15
Esperto. Mas com base no meu entendimento muito limitado, ele não funciona com alfabetos que não têm maiúsculas e minúsculas, como chinês ou japonês
Notre
3
ótimo (e inteligente) código. Funciona com todos os alfabetos latinos.
fvlinden
1
Pessoalmente, adoro funções como esta, porque é muito mais fácil de olhar e compreender do que as funções regex
Djave
3
solução brilhante. No caso de c = '1a', simplesmente divida sua string em array e loop, por exemplo, `function isLetters (arr) {for (var i = 0; i <arr.length; i ++) {if (arr [i]. toLowerCase ()! = arr [i] .toUpperCase ()) {} else {return false; }} return true; } `
Ronnie Royston
6
Em comparação com a solução baseada em um /[a-z]/ipadrão, este truque aceita a gama completa de caracteres latinos. Em comparação com a outra solução que contém um mapeamento superior-inferior Latin Unicode completo, você economiza 99,2% no tamanho do código. É enganoso chamar essa solução de "errada", porque depende do seu problema. Se o seu escopo é o conjunto de caracteres latinos, esta é uma maneira simples e elegante de resolvê-lo.
filip
28
if( char.toUpperCase() != char.toLowerCase() ) 

Retornará verdadeiro somente no caso de carta

Como ressaltado no comentário abaixo, se seu personagem não for inglês, High Ascii ou intervalo de byte duplo, você precisará adicionar verificação de ponto de código.

if( char.toUpperCase() != char.toLowerCase() || char.codePointAt(0) > 127 )
verão
fonte
1
apenas para adicionar dois pence, se transformá-lo em uma função, adicione uma marca de verificação se sua string e faça com que o comprimento seja um ou certifique-se de que o comprimento seja um. Isso é para prevenir, 1apor exemplo.
revelt
1
@AnchovyLegend Funciona porque não existem versões em maiúsculas e minúsculas de números, pontuação e outros caracteres não alfabéticos. Em outras palavras, a maiúscula e a minúscula deles serão iguais, enquanto as maiúsculas e minúsculas das letras serão diferentes. Pessoalmente, gosto desta técnica porque é independente da linguagem (funciona com linguagens com sinais diacríticos). Não executei nenhum benchmark, mas acho que isso é mais eficiente do que construir uma regex. (Mas posso estar errado, já que regex são incrivelmente rápidos.)
Daniel 'Dang' Griffith
2
Isso falha para scripts que não fazem distinção entre maiúsculas e minúsculas, como o chinês.
Michael Schmid
@MichaelSchmid, podemos adicionar verificação de ponto de código, digamos "a" .codePointAt (0) .toString (16). O ponto de código deve ser maior que 127.
Suméria
2
@Sumer, por que isso ajudaria? Só porque o ponto de código está acima de 127 não significa que é uma letra.
Michael Schmid
8

ES6 suporta expressões regulares com reconhecimento de Unicode.

RegExp(/^\p{L}/,'u').test(str)

Isso funciona para todos os alfabetos.

Infelizmente, há um bug no Firefox (será corrigido na versão 78) que impede que ele seja usado universalmente. Mas se você pode controlar seu ambiente de execução e ele oferece suporte (por exemplo, Node.js), esta é uma solução direta e abrangente.

Atlernativamente, XRegExp fornece um polyfill de expressão regular moderna para todos os navegadores.

Michael Schmid
fonte
4

Que tal usar códigos ASCII?

let n = str.charCodeAt(0);
let strStartsWithALetter = (n >= 65 && n < 91) || (n >= 97 && n < 123);
fmg
fonte
2
Funciona perfeitamente no caso improvável de você processar apenas textos em inglês. (Uma suposição que está errada para quase todos os sistemas.)
Michael Schmid
Quando os caracteres são fáceis de ler (como é o caso aqui), escrever códigos Ascii ou Unicode (por exemplo, 65 em vez de 'A') é uma prática ruim, porque é ilegível. Veja outras respostas para saber como escrever isso corretamente.
Philippe-André Lorin
2

Esta solução funciona com caracteres especiais também, por exemplo é, è, ê, ü, ö,à

2 etapas:

  1. Remova os acentos, com base nesta resposta: Remova os acentos / diacríticos em uma string em JavaScript
  2. Verifique se a a z, usando regex ou Unicode (sua escolha)

Demonstrações ao vivo da minha solução:

  1. usando funções globais
  2. usando o padrão de módulo javascript

Nota : Eu postei a solução que usa funções globais, pois é provavelmente a mais simples de entender. Mas dê uma olhada em "padrão de módulo javascript" se você quiser um código melhor (mais limpo, mais fácil de manter e estender), veja stunningwebs.com/my-current-javascript-design-pattern e também este vídeo do YouTube (apresentação de Paul Irish).

var defaultDiacriticsRemovalap = [
    {'base':'A', 'letters':'\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F'},
    {'base':'AA','letters':'\uA732'},
    {'base':'AE','letters':'\u00C6\u01FC\u01E2'},
    {'base':'AO','letters':'\uA734'},
    {'base':'AU','letters':'\uA736'},
    {'base':'AV','letters':'\uA738\uA73A'},
    {'base':'AY','letters':'\uA73C'},
    {'base':'B', 'letters':'\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181'},
    {'base':'C', 'letters':'\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E'},
    {'base':'D', 'letters':'\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779'},
    {'base':'DZ','letters':'\u01F1\u01C4'},
    {'base':'Dz','letters':'\u01F2\u01C5'},
    {'base':'E', 'letters':'\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E'},
    {'base':'F', 'letters':'\u0046\u24BB\uFF26\u1E1E\u0191\uA77B'},
    {'base':'G', 'letters':'\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E'},
    {'base':'H', 'letters':'\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D'},
    {'base':'I', 'letters':'\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197'},
    {'base':'J', 'letters':'\u004A\u24BF\uFF2A\u0134\u0248'},
    {'base':'K', 'letters':'\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2'},
    {'base':'L', 'letters':'\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780'},
    {'base':'LJ','letters':'\u01C7'},
    {'base':'Lj','letters':'\u01C8'},
    {'base':'M', 'letters':'\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C'},
    {'base':'N', 'letters':'\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4'},
    {'base':'NJ','letters':'\u01CA'},
    {'base':'Nj','letters':'\u01CB'},
    {'base':'O', 'letters':'\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C'},
    {'base':'OI','letters':'\u01A2'},
    {'base':'OO','letters':'\uA74E'},
    {'base':'OU','letters':'\u0222'},
    {'base':'OE','letters':'\u008C\u0152'},
    {'base':'oe','letters':'\u009C\u0153'},
    {'base':'P', 'letters':'\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754'},
    {'base':'Q', 'letters':'\u0051\u24C6\uFF31\uA756\uA758\u024A'},
    {'base':'R', 'letters':'\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782'},
    {'base':'S', 'letters':'\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784'},
    {'base':'T', 'letters':'\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786'},
    {'base':'TZ','letters':'\uA728'},
    {'base':'U', 'letters':'\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244'},
    {'base':'V', 'letters':'\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245'},
    {'base':'VY','letters':'\uA760'},
    {'base':'W', 'letters':'\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72'},
    {'base':'X', 'letters':'\u0058\u24CD\uFF38\u1E8A\u1E8C'},
    {'base':'Y', 'letters':'\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE'},
    {'base':'Z', 'letters':'\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762'},
    {'base':'a', 'letters':'\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250'},
    {'base':'aa','letters':'\uA733'},
    {'base':'ae','letters':'\u00E6\u01FD\u01E3'},
    {'base':'ao','letters':'\uA735'},
    {'base':'au','letters':'\uA737'},
    {'base':'av','letters':'\uA739\uA73B'},
    {'base':'ay','letters':'\uA73D'},
    {'base':'b', 'letters':'\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253'},
    {'base':'c', 'letters':'\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184'},
    {'base':'d', 'letters':'\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A'},
    {'base':'dz','letters':'\u01F3\u01C6'},
    {'base':'e', 'letters':'\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD'},
    {'base':'f', 'letters':'\u0066\u24D5\uFF46\u1E1F\u0192\uA77C'},
    {'base':'g', 'letters':'\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F'},
    {'base':'h', 'letters':'\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265'},
    {'base':'hv','letters':'\u0195'},
    {'base':'i', 'letters':'\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131'},
    {'base':'j', 'letters':'\u006A\u24D9\uFF4A\u0135\u01F0\u0249'},
    {'base':'k', 'letters':'\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3'},
    {'base':'l', 'letters':'\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747'},
    {'base':'lj','letters':'\u01C9'},
    {'base':'m', 'letters':'\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F'},
    {'base':'n', 'letters':'\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5'},
    {'base':'nj','letters':'\u01CC'},
    {'base':'o', 'letters':'\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275'},
    {'base':'oi','letters':'\u01A3'},
    {'base':'ou','letters':'\u0223'},
    {'base':'oo','letters':'\uA74F'},
    {'base':'p','letters':'\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755'},
    {'base':'q','letters':'\u0071\u24E0\uFF51\u024B\uA757\uA759'},
    {'base':'r','letters':'\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783'},
    {'base':'s','letters':'\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B'},
    {'base':'t','letters':'\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787'},
    {'base':'tz','letters':'\uA729'},
    {'base':'u','letters': '\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289'},
    {'base':'v','letters':'\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C'},
    {'base':'vy','letters':'\uA761'},
    {'base':'w','letters':'\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73'},
    {'base':'x','letters':'\u0078\u24E7\uFF58\u1E8B\u1E8D'},
    {'base':'y','letters':'\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF'},
    {'base':'z','letters':'\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763'}
];

var diacriticsMap = {};
for (var i=0; i < defaultDiacriticsRemovalap.length; i++){
    var letters = defaultDiacriticsRemovalap[i].letters.split("");
    for (var j=0; j < letters.length ; j++){
        diacriticsMap[letters[j]] = defaultDiacriticsRemovalap[i].base;
    }
}

function removeDiacriticFromChar (char) {
    return diacriticsMap[char] || char; 
}


/*
 *  [1] Remove the accent, based on answer of /programming/990904/javascript-remove-accents-in-strings
 *  [2] Check if a to z character, using regex or unicode (your choice, here using regex)
 *
 */
function isLetter(char) {
  var charWithoutAccent = removeDiacriticFromChar(char);  /* [1] */
  return charWithoutAccent.match(/[a-z]/i);               /* [2] */
}

console.log( "is 'u' is a letter? " + (isLetter('u') ? 'true' : 'false') );
console.log( "is 'ü' is a letter? " + (isLetter('ü') ? 'true' : 'false') );
console.log( "is 'à' is a letter? " + (isLetter('à') ? 'true' : 'false') );
console.log( "is 'ö' is a letter? " + (isLetter('ö') ? 'true' : 'false') );
console.log( "is 'ù' is a letter? " + (isLetter('ù') ? 'true' : 'false') );
console.log( "is 'é' is a letter? " + (isLetter('é') ? 'true' : 'false') );
console.log( "is 'é' is a letter? " + (isLetter('é') ? 'true' : 'false') );
console.log( "is 'ê' is a letter? " + (isLetter('ê') ? 'true' : 'false') );

Adrien Be
fonte
6
Parece não funcionar com caracteres chineses ou japoneses
Notre
10
é como dizer que o céu está azul
Adrien Be
1

Então, temos um primeiro caractere usando charArt()função e, em seguida, tentamos combiná-lo usando uma expressão regular para verificar se há uma letra minúscula começando de a a z e retornar os resultados como umboolean

Boolean('#Foo'.charAt(0).match(/[a-zA-Z]/)) // false
Boolean('Foo'.charAt(0).match(/[a-zA-Z]/)) // true
FDisk
fonte
Você poderia fornecer uma breve explicação ou descrição do Código? Respostas apenas em código são desencorajadas.
Nimantha
0

Estou postando aqui porque não queria postar uma pergunta nova. Supondo que não haja declarações de um único caractere no código, você pode eval () o caractere para causar um erro e verificar o tipo do caractere. Algo como:

function testForLetter(character) {
  try {
    //Variable declarations can't start with digits or operators
    //If no error is thrown check for dollar or underscore. Those are the only nonletter characters that are allowed as identifiers
    eval("let " + character + ";");
    let regExSpecial = /[^\$_]/;
    return regExSpecial.test(character);
  } catch (error) {
    return false;
  }
}

console.log(testForLetter("!")); //returns false;
console.log(testForLetter("5")); //returns false;
console.log(testForLetter("ن")); //returns true;
console.log(testForLetter("_")); //returns false;

Didakov
fonte
Se o seu teste retornar verdadeiro para sublinhados, ele não será útil.
Jérôme Verstrynge
Isso apresenta uma ameaça potencial de segurança de injeção de código. Use apenas com cuidado, se usar.
Michael Schmid
0

É possível saber se o caractere é uma letra ou não usando uma função embutida padrão isNaN ou Number.isNaN () do ES6:

isNaN('s') // true
isNaN('-') // true
isNaN('32') // false, '32' is converted to the number 32 which is not NaN

Ele retorna verdadeiro se o valor fornecido não for um número, caso contrário, falso.

Alexa-905
fonte
Inteligente, mas não tenho certeza se é uma resposta suficiente ... Além disso, Marc sugeriu isso nos comentários ...
Garrett Motzner
var sn = "string indijf &"; var nn = isNaN (sn) document.getElementById ("demo"). innerHTML = nn; Estou passando números ou caracteres especiais ainda retornam verdadeiros. você pode adicionar mais detalhes nas respostas
Sr. S Coder
Em que alfabeto é “-” uma letra?
Michael Schmid de
-1
// to check if the given string contain alphabets    
function isPangram(sentence){
        let lowerCased = sentence.toLowerCase();
        let letters = "abcdefghijklmnopqrstuvwxyz";
        // traditional for loop can also be used
        for (let char of letters){
            if (!lowerCased.includes(char)) return false;
        }
        return true;
    }
Roshan Rijal
fonte
1
Unicode atualmente tem 128 000 caracteres cobrindo 135 alfabetos. Esses 26 são um subconjunto muito pequeno deles.
Michael Schmid
-1

Eu criei uma função para fazer isso:

var isLetter = function (character) {
  if( (character.charCodeAt() >= 65 && character.charCodeAt() <= 90) || (character.charCodeAt() >= 97 && character.charCodeAt() <= 122) ) {
    return true;
  }
  else{
    return false;
  }
}

Isso basicamente verifica na tabela ASCII se o código do caractere se refere a uma Letra.

Você pode ver a tabela ASCII neste link e comparar as colunas DEC (onde está o código) e o símbolo : https://www.ascii-code.com/

Nota: Minha função é verdadeira apenas para letras "simples" (coisas como "Á", "é", "ç", "Ü" ela retornará falsa ... mas se você precisar, pode adaptar esta função para outras condições )

PedroProgrammer
fonte
-1

Podemos verificar também de forma simples como:

function isLetter(char){
    return ( (char >= 'A' &&  char <= 'Z') ||
             (char >= 'a' &&  char <= 'z') );
}


console.log(isLetter("a"));
console.log(isLetter(3));
console.log(isLetter("H"));

ganesh phirke
fonte