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?


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


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);
}

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.


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 )

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.


4

Que diriez-vous d'utiliser des codes ASCII?

let n = str.charCodeAt(0);
let strStartsWithALetter = (n >= 65 && n < 91) || (n >= 97 && n < 123);

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') );


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;


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.


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;
    }

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 ).


-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

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"));

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.