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?
javascript
string
character
letter
Jérôme Verstrynge
fonte
fonte
NaN
? Ou apenasisNan(first)
acho.Respostas:
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
fonte
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); }
fonte
str
for 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; },
return str.length === 1 && str.match(/[a-z]/i);
parareturn str.length === 1 && !!str.match(/[a-z]/i);
. Se isso for algo que você gostaria de incorporar à sua resposta. Mesmo assim, votado positivamente.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.
fonte
/[a-z]/i
padrã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.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 )
fonte
1a
por exemplo.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.
fonte
Que tal usar códigos ASCII?
let n = str.charCodeAt(0); let strStartsWithALetter = (n >= 65 && n < 91) || (n >= 97 && n < 123);
fonte
Esta solução funciona com caracteres especiais também, por exemplo
é
,è
,ê
,ü
,ö
,à
2 etapas:
Demonstrações ao vivo da minha solução:
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') );
fonte
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
fonte
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;
fonte
É 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.
fonte
// 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; }
fonte
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 )
fonte
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"));
fonte