Wie überprüfe ich, ob das Zeichen ein Buchstabe in Javascript ist?


94

Ich extrahiere ein Zeichen in einer Javascript-Zeichenfolge mit:

var first = str.charAt(0);

und ich möchte prüfen, ob es sich um einen Brief handelt. Seltsamerweise scheint es nicht so zu sein, dass solche Funktionen in Javascript vorhanden sind. Zumindest kann ich es nicht finden.

Wie kann ich das testen?


4
Nummer erstellen und testen gegen NaN? Oder isNan(first)ich denke nur.
Marc

6
@Marc Wenn dieses Zeichen zum Beispiel '-' wäre, würde Ihr Test nicht anzeigen, dass es sich um einen Buchstaben handelt ...
Jérôme Verstrynge

2
"Brief" definieren? Nur englisches Alpha oder etwas anderes? Möchten Sie "Blacklist" oder "Whitelist"?
Wesley Murch

3
@JVerstry nicht jeder kennt Java. Kannst du uns nicht einfach sagen, welche Charaktere erlaubt sind?
PeeHaa

1
Ich sehe viele Leute, die hier JS Java anrufen. JS und Java sind nicht dasselbe, auch nicht in der Nähe. Das eine ist im Wesentlichen ein Spielzeug, das andere dient zum Erstellen von Websites.
Ian Wise

Antworten:


15

Ich glaube, dieses Plugin hat die Funktionen, die Sie suchen: http://xregexp.com/plugins/ (Github-Link: https://github.com/slevithan/xregexp )

Damit können Sie einfach alle Unicode-Buchstaben mit abgleichen \p{L}.

Lesen Sie den Header dieser Quelldatei, um festzustellen, welche Kategorien unterstützt werden: http://xregexp.com/plugins/xregexp-unicode-categories.js


1
Haben Sie Erfahrung mit der Verwendung dieses Plugins in Projekten, an denen Sie gearbeitet haben? (Ich frage mich nur, wie zuverlässig diese Bibliothek ist)
Adrien Be

Downvoting, da dies sicherlich eine schlechte Antwort für 2019 ist
Peter

3
@Peter Könnten Sie bitte eine Antwort verlinken, die Sie für 2019 für geeignet halten? Ich würde meiner Antwort einen Link als Bearbeitung hinzufügen, solange die andere Lösung mit allen Unicode-Zeichen funktioniert.
Bezmax

147

Ich glaube nicht, dass es dafür eine eingebaute Funktion gibt. Aber es ist einfach genug, mit einem regulären Ausdruck zu schreiben

function isLetter(str) {
  return str.length === 1 && str.match(/[a-z]/i);
}

50
Der Code testet nur, ob das Zeichen einer der Grundbuchstaben von a bis z ist (nur sehr wenige Sprachen werden nur mit diesen Buchstaben geschrieben). Dies unterscheidet sich stark von der erwähnten Java-Funktion.
Jukka K. Korpela

10
Sie können weiterhin einen regulären Ausdruck verwenden und bei Bedarf weitere Details hinzufügen: str.match (/ [AZ | az | ü | é] / i); // etc
Eli

Vielleicht funktioniert das? var char=str.toLowerCase(); return (char.length==1 && char>='a' && char<='z')
Yibo Yang

2
@YiboYang - nein, bin zum obigen jsbin-Link gegangen, habe ihn in deinen geändert und ausgeführt und habe Folgendes erhalten: "Ist 'u' ein Buchstabe? Richtig" "Ist 'ü' ein Buchstabe? Falsch" "ist 'à 'ist ein Brief? falsch "Mit Ihrem Code.
Julix

3
Es sollte beachtet werden, dass dies nicht wirklich true || zurückgibt falsch wie man erwarten könnte. Wenn stres sich um einen Wert von az handelt, wird dieser Wert zurückgegeben. Andernfalls wird null zurückgegeben. Wenn Sie es benötigen, um true / false zurückzugeben, verwenden Sie dies. isLetter: function (str) { if (str.length !== 1 && str.match(/[a-z]/i)) { return true; } return false; },
Regis

104

In Bezug auf Sonderzeichen, die bei einfacheren Überprüfungen nicht berücksichtigt werden /[a-zA-Z]/.test(c), kann es von Vorteil sein, die ECMAScript-Falltransformation zu nutzen ( toUpperCase). Nicht-ASCII-Unicode-Zeichenklassen einiger fremder Alphabete werden berücksichtigt.

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

HINWEIS: Diese Lösung funktioniert nur für die meisten lateinischen, griechischen, armenischen und kyrillischen Skripte. Es funktioniert NICHT für Chinesisch, Japanisch, Arabisch, Hebräisch und die meisten anderen Skripte.


15
Klug. Aber basierend auf meinem sehr begrenzten Verständnis funktioniert es nicht mit Alphabeten, die keine Groß- und Kleinschreibung haben, wie Chinesisch oder Japanisch
Notre

3
toller (und kluger) Code. Funktioniert mit allen lateinischen Alphabeten.
fvlinden

1
Persönlich liebe ich Funktionen wie diese, da sie so viel einfacher zu betrachten und zu verstehen sind als die Regex-Funktionen
Djave

3
brillante Lösung. Im Fall von c = '1a' teilen Sie einfach Ihren String in Array und Schleife auf, z. B. `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

5
Im Vergleich zu der auf einem /[a-z]/iMuster basierenden Lösung akzeptiert dieser Trick den gesamten Bereich der lateinischen Zeichen. Im Vergleich zu der anderen Lösung mit einer vollständigen lateinischen Unicode-Zuordnung von oben nach unten sparen Sie 99,2% an Codegröße. Es ist irreführend, diese Lösung als "falsch" zu bezeichnen, da dies von Ihrem Problem abhängt. Wenn Ihr Anwendungsbereich der lateinische Zeichensatz ist, ist dies eine schlanke und elegante Möglichkeit, ihn zu lösen.
Filip

23
if( char.toUpperCase() != char.toLowerCase() ) 

Wird nur im Falle eines Briefes wahr zurückgegeben

Wie im folgenden Kommentar erwähnt, müssen Sie, wenn Ihr Charakter nicht Englisch, Hoch-Ascii oder Doppelbyte-Bereich ist, die Prüfung auf Codepunkt hinzufügen.

if( char.toUpperCase() != char.toLowerCase() || char.codePointAt(0) > 127 )

1
Nur um zwei Pence hinzuzufügen, wenn Sie es in eine Funktion verwandeln, fügen Sie eine Prüfung hinzu, ob es sich um eine Zeichenfolge handelt, und erzwingen Sie, dass die Länge eins ist, oder stellen Sie sicher, dass die Länge eins ist. Das soll 1azum Beispiel verhindern .
revelt

@AnchovyLegend Es funktioniert, weil es keine Groß- und Kleinbuchstaben von Zahlen, Satzzeichen und anderen nicht alphabetischen Zeichen gibt. Mit anderen Worten, Groß- und Kleinschreibung sind gleich, während Groß- und Kleinbuchstaben unterschiedlich sind. Persönlich mag ich diese Technik, weil sie unabhängig von der Sprache ist (sie funktioniert mit Sprachen mit diakritischen Zeichen). Ich habe keine Benchmarks durchgeführt, aber ich würde vermuten, dass dies effizienter ist als das Erstellen eines regulären Ausdrucks. (Aber ich könnte mich irren, da Regex erstaunlich schnell sind.)
Daniel 'Dang' Griffith

1
Dies schlägt bei Skripten fehl, die nicht zwischen Groß- und Kleinschreibung unterscheiden, wie z. B. Chinesisch.
Michael Schmid

@MichaelSchmid, Wir können eine Codepunktprüfung hinzufügen, sagen wir "a" .codePointAt (0) .toString (16). Der Codepunkt sollte größer als 127 sein.
Sumer

2
@Sumer, warum sollte das helfen? Nur weil der Codepunkt über 127 liegt, heißt das nicht, dass es sich um einen Buchstaben handelt.
Michael Schmid

3

Wie wäre es mit ASCII-Codes?

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

1
Funktioniert perfekt für den unwahrscheinlichen Fall, dass Sie nur englische Texte verarbeiten. (Eine Annahme, die für fast jedes System falsch ist.)
Michael Schmid

Wenn Zeichen leicht zu lesen sind (wie hier), ist das Schreiben von Ascii- oder Unicode-Codes (z. B. 65 anstelle von 'A') eine schlechte Praxis, da sie nicht lesbar sind. In anderen Antworten erfahren Sie, wie Sie dies richtig schreiben.
Philippe-André Lorin

2

Diese Lösung funktioniert mit Sonderzeichen zu, zum Beispiel é, è, ê, ü, ö,à

2 Schritte:

  1. Entfernen Sie die Akzente basierend auf dieser Antwort: Entfernen Sie Akzente / diakritische Zeichen in einer Zeichenfolge in JavaScript
  2. Überprüfen Sie mit Regex oder Unicode, ob Zeichen von A bis Z (nach Ihrer Wahl).

Live-Demos meiner Lösung:

  1. mit globalen Funktionen
  2. mit Javascript-Modulmuster

Hinweis : Ich habe die Lösung veröffentlicht, die globale Funktionen verwendet, da sie wahrscheinlich am einfachsten zu verstehen ist. Schauen Sie sich aber das "Javascript-Modulmuster" an, wenn Sie besseren Code wünschen (sauberer, einfacher zu warten und zu erweitern), siehe eindrucksvolles Web.com/my-current-javascript-design-pattern und auch dieses YouTube-Video (Präsentation von 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
Es scheint nicht mit chinesischen oder japanischen Schriftzeichen zu funktionieren
Notre

8
Es ist wie zu sagen, der Himmel ist blau
Adrien Be

2

ES6 unterstützt Unicode-fähige reguläre Ausdrücke.

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

Dies funktioniert für alle Alphabete.

Leider gibt es in Firefox einen Fehler (der in Version 78 behoben wird), der verhindert, dass dieser universell verwendet wird. Wenn Sie jedoch Ihre Laufzeitumgebung steuern können und diese unterstützt (z. B. Node.js), ist dies eine einfache und umfassende Lösung.

Atlernativ bietet XRegExp allen Browsern eine Polyfüllung mit modernen regulären Ausdrücken.


1

Ich poste hier, weil ich keine neue Frage stellen wollte. Angenommen, der Code enthält keine einzelnen Zeichendeklarationen, können Sie das Zeichen auswerten (), um einen Fehler zu verursachen, und den Typ des Zeichens überprüfen. Etwas wie:

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;


Wenn Ihr Test für Unterstriche true zurückgibt, ist er nicht hilfreich.
Jérôme Verstrynge

Dies führt zu einer potenziellen Sicherheitsbedrohung durch Code-Injection. Wenn überhaupt, nur vorsichtig verwenden.
Michael Schmid

0

Mithilfe einer integrierten Standardfunktion isNaN oder Number.isNaN () aus ES6 können Sie feststellen , ob das Zeichen ein Buchstabe ist oder nicht :

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

Es wird true erneut ausgeführt, wenn der angegebene Wert keine Zahl ist, andernfalls false.


Clever, aber ich bin mir nicht sicher, ob es eine ausreichende Antwort ist ... Auch Marc schlug dies in den Kommentaren vor ...
Garrett Motzner

var sn = "string indijf &"; var nn = isNaN (sn) document.getElementById ("Demo"). innerHTML = nn; Ich übergebe Zahlen oder Sonderzeichen, die immer noch true zurückgeben.
Mr S Coder

In welchem ​​Alphabet steht "-" ein Buchstabe?
Michael Schmid

-1

Es gibt eine alte Schulmethode, die wir beim Lernen in vielen Sprachen angewendet haben.

function  isLetter(value) {
   value = value.toUpperCase();
   for (let i = 0; i < value.length; i++) 
      if (!(value[i] >= "A" && value[i] <= "Z")) return false;

   return true;
}

4
Dies funktioniert beispielsweise nicht für nicht-lateinische, az, AZ-Bereiche ž. Der Algorithmus, der Groß- und Kleinbuchstaben vergleicht, ist überlegen.
revelt

-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 hat derzeit 128 000 Zeichen, die 135 Alphabete abdecken. Diese 26 sind eine wirklich kleine Untergruppe von ihnen.
Michael Schmid

-1

Ich habe eine Funktion gemacht, um dies zu tun:

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

Dies überprüft grundsätzlich in der ASCII-Tabelle, ob sich der Code des Zeichens auf einen Buchstaben bezieht.

Sie können die ASCII-Tabelle unter diesem Link sehen und die Spalten DEC (wo ist der Code) und das Symbol vergleichen : https://www.ascii-code.com/

Hinweis: Meine Funktion gilt nur für "einfache" Buchstaben (z. B. "Á", "é", "ç", "Ü"). Es wird false zurückgegeben. Bei Bedarf können Sie diese Funktion jedoch an andere Bedingungen anpassen ).


-1

Wir haben also ein erstes Zeichen mit der charArt()Funktion erhalten und versuchen dann, ir mit einem regulären Ausdruck abzugleichen, um zu überprüfen, ob ein Buchstabe von a bis z in Kleinbuchstaben geschrieben ist, und geben das Ergebnis als a zurückboolean

Boolean('#Foo'.charAt(0).match(/[a-zA-Z]/)) // false
Boolean('Foo'.charAt(0).match(/[a-zA-Z]/)) // true

Könnten Sie eine kurze Erklärung oder Beschreibung des Kodex geben? Nur-Code-Antworten werden nicht empfohlen.
Nimantha

-1

Wir können auch auf einfache Weise überprüfen, wie:

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


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


-2

Für normalen englischen Ascii-Code zwischen 0 und 127 (Nicht für Chinesisch und andere Alphabete, weil Sie angeblich nicht in solchen arbeiten)

if (((currentChar > '@')&&(currentChar < '[')) || ((currentChar > '`')&& (currentChar<'{')))
{
   return true;
    // It is an english alphabetical character(Uppercase for the first lot,                      //          lowercase thethe second lot. We will have it
}

Bitte konsultieren oder googeln Sie Ihre Ascii-Tabelle .


2
wie wäre es "a" <= currentChar && currentChar <= "z"viel einfacher.
Tobiq

1
der Großbuchstaben! == Kleinbuchstaben-Algorithmus ist überlegen imho
revelt

"Angeblich arbeiten Sie nicht in solchen". Bitte nehmen Sie nicht an, dass dies schlechte Praktiken verbreitet und den Weg für defekte Software ebnet.
Philippe-André Lorin
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.