Comment vérifier si le caractère est une lettre en Javascript?

94

J'extrais un caractère dans une chaîne Javascript avec:

var first = str.charAt(0);

et je voudrais vérifier s'il s'agit d'une lettre. Curieusement, il ne semble pas qu'une telle fonctionnalité existe en Javascript. Au moins, je ne peux pas le trouver.

Comment puis-je tester cela?

Jérôme Verstrynge
la source
4
Créer un nombre et le tester NaN? Ou juste isNan(first)je suppose.
Marc
6
@Marc Si ce caractère était '-' par exemple, votre test n'indiquerait pas qu'il s'agit d'une lettre ...
Jérôme Verstrynge
2
Définir "lettre"? Anglais alpha seulement, ou autre chose? Voulez-vous "mettre sur liste noire" ou "liste blanche"?
Wesley Murch
3
@JVerstry tout le monde ne connaît pas Java. Tu ne peux pas nous dire quels personnages seront autorisés?
PeeHaa
1
Je vois beaucoup de gens appeler JS Java ici. JS et Java ne sont pas la même chose, même pas proches. L'un est essentiellement un jouet, l'autre est destiné à la création de sites Web.
Ian Wise

Réponses:

15

Je pense que ce plugin a les capacités que vous recherchez: http://xregexp.com/plugins/ (lien github: https://github.com/slevithan/xregexp )

Avec lui, vous pouvez simplement faire correspondre toutes les lettres unicode avec \p{L}.

Lisez l'en-tête de ce fichier source pour voir quelles catégories il prend en charge: http://xregexp.com/plugins/xregexp-unicode-categories.js

bezmax
la source
1
Avez-vous de l'expérience dans l'utilisation de ce plugin sur des projets sur lesquels vous avez travaillé? (je me demande juste à quel point cette bibliothèque est fiable)
Adrien Be
downvoting car c'est certainement une mauvaise réponse pour 2019
Peter
5
@Peter Pourriez-vous s'il vous plaît lier une réponse que vous jugez appropriée pour 2019? J'ajouterais un lien vers celui-ci en tant que modification de ma réponse tant que l'autre solution fonctionne avec tous les caractères Unicode.
bezmax
146

Je ne pense pas qu'il existe une fonction intégrée pour cela. Mais c'est assez facile d'écrire avec une regex

function isLetter(str) {
  return str.length === 1 && str.match(/[a-z]/i);
}
JaredPar
la source
50
Le code teste uniquement si le caractère est l'une des lettres de base de a à z (très peu de langues sont écrites en utilisant uniquement ces lettres). Ceci est très différent de la fonction Java qui a été mentionnée.
Jukka K. Korpela
11
Vous pouvez toujours utiliser une regex et ajouter simplement plus de détails selon vos besoins: str.match (/ [AZ | az | ü | é] / i); // etc
Eli
peut-être que cela fonctionne? var char=str.toLowerCase(); return (char.length==1 && char>='a' && char<='z')
Yibo Yang le
2
@YiboYang - non, est allé au lien jsbin ci-dessus, l'a changé pour le vôtre et l'a exécuté, et j'ai obtenu ceci: "est-ce que 'u' est une lettre? True" "est 'ü' est une lettre? False" "est 'à 'est une lettre? false "Avec votre code.
Julix
3
Il convient de noter que cela ne renvoie pas réellement vrai || faux comme on pourrait s'y attendre. Si strest une valeur de az, il renvoie cette valeur. Sinon, il retourne null. Si vous en avez besoin pour renvoyer vrai / faux, utilisez ceci. isLetter: function (str) { if (str.length !== 1 && str.match(/[a-z]/i)) { return true; } return false; },
Regis
107

En ce qui concerne ces caractères spéciaux qui ne sont pas pris en compte par des vérifications plus simples telles que /[a-zA-Z]/.test(c), il peut être avantageux de tirer parti de la transformation de cas d'ECMAScript ( toUpperCase). Il prendra en compte les classes de caractères Unicode non ASCII de certains alphabets étrangers.

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

REMARQUE: cette solution ne fonctionnera que pour la plupart des scripts latins, grecs, arméniens et cyrilliques. Cela ne fonctionnera PAS pour le chinois, le japonais, l'arabe, l'hébreu et la plupart des autres scripts.

filip
la source
15
Intelligent. Mais sur la base de ma compréhension très limitée, cela ne fonctionne pas avec des alphabets qui n'ont pas de majuscules et de minuscules, comme le chinois ou le japonais
Notre
3
code génial (et intelligent). Fonctionne avec tous les alphabets latins.
fvlinden
1
Personnellement, j'adore les fonctions comme celle-ci car c'est tellement plus facile à regarder et à comprendre que les fonctions regex
Djave
3
solution brillante. Dans le cas de c = '1a', divisez simplement votre chaîne en tableau et en boucle, par exemple, `function isLetters (arr) {for (var i = 0; i <arr.length; i ++) {if (arr [i]. toLowerCase ()! = arr [i] .toUpperCase ()) {} else {return false; }} retourne vrai; } `
Ronnie Royston
5
Par rapport à la solution basée sur un /[a-z]/imotif, cette astuce acceptera la gamme complète de caractères latins. Par rapport à l'autre solution contenant un mappage complet Latin Unicode supérieur-inférieur, vous économisez 99,2% en taille de code. Il est trompeur d’appeler cette solution «fausse», car cela dépend de votre problème. Si votre champ d'application est le jeu de caractères latins, c'est un moyen simple et élégant de le résoudre.
filip
28
if( char.toUpperCase() != char.toLowerCase() ) 

Reviendra vrai uniquement en cas de lettre

Comme indiqué dans le commentaire ci-dessous, si votre caractère n'est pas anglais, High Ascii ou à deux octets, vous devez ajouter une vérification du point de code.

if( char.toUpperCase() != char.toLowerCase() || char.codePointAt(0) > 127 )
Sumer
la source
1
juste pour ajouter deux points, si vous le transformez en une fonction, ajoutez une vérification s'il s'agit d'une chaîne et appliquez la longueur à un ou assurez-vous que la longueur est égale à un. C'est pour éviter 1apar exemple.
revelt
1
@AnchovyLegend Cela fonctionne car il n'y a pas de versions majuscules et minuscules des nombres, des signes de ponctuation et d'autres caractères non alphabétiques. En d'autres termes, les majuscules et les minuscules seront identiques, tandis que les majuscules et les minuscules des lettres seront différentes. Personnellement, j'aime cette technique car elle est indépendante de la langue (elle fonctionne avec des langues avec des signes diacritiques). Je n'ai pas exécuté de benchmarks, mais je suppose que c'est plus efficace que de construire une regex. (Mais je peux me tromper, car les regex sont incroyablement rapides.)
Daniel 'Dang' Griffith
2
Cela échoue pour les scripts qui ne font pas de distinction entre les majuscules et les minuscules, comme le chinois.
Michael Schmid
@MichaelSchmid, Nous pouvons ajouter une vérification de point de code, disons "a" .codePointAt (0) .toString (16). Le point de code doit être supérieur à 127.
Sumer
2
@Sumer, pourquoi cela aiderait-il? Ce n'est pas parce que le point de code est supérieur à 127 que c'est une lettre.
Michael Schmid le
6

ES6 prend en charge les expressions régulières compatibles Unicode.

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

Cela fonctionne pour tous les alphabets.

Malheureusement, il existe un bug dans Firefox (qui sera corrigé dans la version 78) qui empêche son utilisation universelle. Mais si vous pouvez contrôler votre environnement d'exécution et qu'il le prend en charge (par exemple Node.js), il s'agit d'une solution simple et complète.

Enfin, XRegExp fournit un polyfill d'expressions régulières modernes à tous les navigateurs.

Michael Schmid
la source
4

Que diriez-vous d'utiliser des codes ASCII?

let n = str.charCodeAt(0);
let strStartsWithALetter = (n >= 65 && n < 91) || (n >= 97 && n < 123);
fmg
la source
1
Fonctionne parfaitement dans le cas peu probable où vous ne traitez que des textes anglais. (Une hypothèse qui est fausse pour presque tous les systèmes.)
Michael Schmid
Lorsque les caractères sont faciles à lire (comme c'est le cas ici), écrire des codes Ascii ou Unicode (par exemple 65 au lieu de «A») est une mauvaise pratique, car il est illisible. Voir d'autres réponses pour savoir comment écrire cela correctement.
Philippe-André Lorin le
2

Cette solution fonctionne avec des caractères spéciaux aussi, par exemple é, è, ê, ü, ö,à

2 étapes:

  1. Supprimez les accents, en fonction de cette réponse: Supprimez les accents / signes diacritiques dans une chaîne en JavaScript
  2. Vérifiez si un caractère de a à z, en utilisant regex ou unicode (votre choix)

Démos en direct de ma solution:

  1. en utilisant des fonctions globales
  2. utilisation du modèle de module javascript

Remarque : j'ai publié la solution qui utilise des fonctions globales car c'est probablement la plus simple à comprendre. Mais regardez dans le "modèle de module javascript" si vous voulez un meilleur code (plus propre, plus facile à maintenir et à étendre), voir impressionnantwebs.com/my-current-javascript-design-pattern et aussi cette vidéo YouTube (présentation 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
la source
6
Il ne semble pas fonctionner avec les caractères chinois ou japonais
Notre
9
c'est comme dire que le ciel est bleu
Adrien Be
1

Je poste ici parce que je ne voulais pas publier de nouvelle question. En supposant qu'il n'y a pas de déclaration de caractère unique dans le code, vous pouvez eval () le caractère pour provoquer une erreur et vérifier le type du caractère. Quelque chose comme:

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
la source
Si votre test renvoie vrai pour les traits de soulignement, cela n'est pas utile.
Jérôme Verstrynge
Cela introduit une menace potentielle pour la sécurité de l'injection de code. À n'utiliser qu'avec précaution, voire pas du tout.
Michael Schmid
0

Il est possible de savoir si le caractère est une lettre ou non en utilisant une fonction intégrée standard isNaN ou Number.isNaN () de ES6:

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

Il renvoie true si la valeur donnée n'est pas un nombre, sinon false.

Alexa-905
la source
Intelligent, mais je ne suis pas sûr que ce soit une réponse suffisante ... Aussi, Marc a suggéré cela dans les commentaires ...
Garrett Motzner
var sn = "string indijf &"; var nn = isNaN (sn) document.getElementById ("démo"). innerHTML = nn; Je passe des nombres ou des caractères spéciaux retournent toujours vrai. pouvez-vous s'il vous plaît ajouter plus de détails réponses
Mr S Coder
Dans quel alphabet est «-» une lettre?
Michael Schmid
-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
la source
1
Unicode compte actuellement 128 000 caractères couvrant 135 alphabets. Ces 26 en sont un très petit sous-ensemble.
Michael Schmid
-1

J'ai créé une fonction pour faire ceci:

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

Cela vérifie essentiellement dans la table ASCII si le code du caractère fait référence à une lettre.

Vous pouvez voir le tableau ASCII sur ce lien et comparer les colonnes DEC (où est le code) et le symbole : https://www.ascii-code.com/

Remarque: Ma fonction n'est vraie que pour les lettres "simples" (des choses comme "Á", "é", "ç", "Ü" elle retournera faux ... mais si vous en avez besoin, vous pouvez adapter cette fonction à d'autres conditions ).

PedroProgrammeur
la source
-1

Nous avons donc un premier caractère utilisant la charArt()fonction, puis essayons de faire correspondre ir en utilisant une expression régulière pour vérifier s'il y a une lettre minuscule commençant de a à z et renvoyer le résultat sous la forme d'unboolean

Boolean('#Foo'.charAt(0).match(/[a-zA-Z]/)) // false
Boolean('Foo'.charAt(0).match(/[a-zA-Z]/)) // true
FDisk
la source
Pourriez-vous fournir une brève explication ou une description du code? Les réponses au code uniquement sont déconseillées.
Nimantha
-1

Nous pouvons également vérifier de manière simple comme:

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
la source