Jak sprawdzić, czy znak jest literą w Javascript?

99

Wyodrębniam znak w ciągu JavaScript za pomocą:

var first = str.charAt(0);

i chciałbym sprawdzić, czy to list. O dziwo, nie wygląda na to, aby taka funkcjonalność istniała w JavaScript. Przynajmniej nie mogę tego znaleźć.

Jak mogę to sprawdzić?

Jérôme Verstrynge
źródło
4
Utworzyć liczbę i przetestować NaN? Albo tak isNan(first)myślę.
Marc
6
@Marc Jeśli tym znakiem byłby na przykład „-”, test nie wskazywałby, że jest to litera ...
Jérôme Verstrynge
2
Zdefiniować „literę”? Tylko angielska alfa czy coś innego? Chcesz umieścić „czarną listę” czy „białą listę”?
Wesley Murch,
3
@JVerstry nie wszyscy znają Javę. Nie możesz nam po prostu powiedzieć, jakie postacie będą dozwolone?
PeeHaa
1
Widzę tutaj wiele osób nazywających JS Java. JS i Java to nie to samo, nawet nie blisko. Jedna jest zasadniczo zabawką, druga służy do tworzenia stron internetowych.
Ian Wise,

Odpowiedzi:

16

Uważam, że ta wtyczka ma możliwości, których szukasz: http://xregexp.com/plugins/ (link do github: https://github.com/slevithan/xregexp )

Dzięki niemu możesz po prostu dopasować wszystkie litery Unicode \p{L}.

Przeczytaj nagłówek tego pliku źródłowego, aby zobaczyć, które kategorie obsługuje: http://xregexp.com/plugins/xregexp-unicode-categories.js

bezmax
źródło
1
Czy masz doświadczenie w używaniu tej wtyczki w projektach, nad którymi pracowałeś? (zastanawiam się tylko, jak niezawodna jest ta biblioteka)
Adrien Be
głosowanie w dół, ponieważ jest to z pewnością kiepska odpowiedź na rok 2019
Peter
6
@Peter Czy mógłbyś połączyć odpowiedź, którą uważasz za odpowiednią na rok 2019? Dodałbym link do niego jako edycję do mojej odpowiedzi, o ile inne rozwiązanie działa ze wszystkimi znakami Unicode.
bezmax
148

Nie wierzę, że jest do tego wbudowana funkcja. Ale dość łatwo jest pisać za pomocą wyrażenia regularnego

function isLetter(str) {
  return str.length === 1 && str.match(/[a-z]/i);
}
JaredPar
źródło
50
Kod sprawdza tylko, czy znak jest jedną z podstawowych liter od a do z (bardzo niewiele języków jest zapisywanych tylko z tych liter). To bardzo różni się od wspomnianej funkcji Java.
Jukka K. Korpela
11
Nadal możesz użyć wyrażenia regularnego i po prostu dodać więcej szczegółów, jeśli potrzebujesz: str.match (/ [AZ | az | ü | é] / i); // itd.
Eli
2
@YiboYang - nie, przeszedłem do powyższego linku jsbin, zmieniłem go na swój i uruchomiłem go i otrzymałem to: „czy 'u' to litera? True” „czy 'ü' to litera? False" "is 'à „Czy to list? Fałsz” Z twoim kodem.
Julix,
3
Należy zauważyć, że to w rzeczywistości nie zwraca prawdy || fałszywe, jak można się spodziewać. Jeśli strjest wartością z az, zwraca tę wartość. W przeciwnym razie zwraca null. Jeśli chcesz, aby zwracała prawda / fałsz, użyj tego. isLetter: function (str) { if (str.length !== 1 && str.match(/[a-z]/i)) { return true; } return false; },
Regis,
1
Soooooo wyniki tego nie zwróciły wartości prawda ani fałsz, na czym mi zależało ... co można osiągnąć po prostu zmieniając return str.length === 1 && str.match(/[a-z]/i);na return str.length === 1 && !!str.match(/[a-z]/i);. Jeśli to jest coś, co chciałbyś uwzględnić w swojej odpowiedzi. Niemniej jednak głosowano za.
ShanerM13
111

Ze względu na to, że te znaki specjalne nie są brane pod uwagę w prostszych kontrolach, takich jak /[a-zA-Z]/.test(c), korzystne może być wykorzystanie transformacji wielkości liter w ECMAScript ( toUpperCase). Uwzględni on klasy znaków Unicode spoza ASCII dla niektórych obcych alfabetów.

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

UWAGA: to rozwiązanie będzie działać tylko dla większości pism łacińskich, greckich, ormiańskich i cyrylicy. NIE będzie działać dla chińskiego, japońskiego, arabskiego, hebrajskiego i większości innych skryptów.

Filip
źródło
15
Sprytny. Ale opierając się na moim bardzo ograniczonym zrozumieniu, nie działa z alfabetami, które nie mają wielkich i małych liter, takich jak chiński lub japoński
Notre
3
świetny (i sprytny) kod. Działa ze wszystkimi alfabetami łacińskimi.
fvlinden
1
Osobiście uwielbiam takie funkcje, ponieważ o wiele łatwiej jest na nie spojrzeć i zrozumieć niż funkcje regex
Djave
3
genialne rozwiązanie. W przypadku c = '1a', po prostu podziel ciąg na tablicę i pętlę, np. `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
W porównaniu z rozwiązaniem opartym na /[a-z]/iwzorcu, ta sztuczka akceptuje pełny zakres znaków łacińskich. W porównaniu z innym rozwiązaniem zawierającym pełne odwzorowanie góra-dół Latin Unicode, oszczędzasz 99,2% rozmiaru kodu. Nazywanie tego rozwiązania „złym” jest mylące, ponieważ zależy to od problemu. Jeśli twoim zasięgiem jest zestaw znaków łacińskich, jest to oszczędny i elegancki sposób rozwiązania tego problemu.
filip
28
if( char.toUpperCase() != char.toLowerCase() ) 

Zwróci prawda tylko w przypadku listu

Jak wskazano w poniższym komentarzu, jeśli twoja postać nie jest angielska, ma wysoki Ascii lub zakres dwubajtowy, musisz dodać sprawdzanie punktu kodowego.

if( char.toUpperCase() != char.toLowerCase() || char.codePointAt(0) > 127 )
Sumer
źródło
1
aby dodać dwa pensy, jeśli zamieniasz go w funkcję, dodaj czek, czy to ciąg i wymuszaj, aby długość była równa jeden, lub upewnij się, że długość wynosi jeden. Ma to 1ana przykład zapobiec .
pojawił się
1
@AnchovyLegend Działa, ponieważ nie ma wielkich i małych wersji liczb, znaków interpunkcyjnych i innych znaków niealfabetycznych. Innymi słowy, ich wielkie i małe litery będą takie same, podczas gdy duże i małe litery będą się różnić. Osobiście podoba mi się ta technika, ponieważ jest niezależna od języka (działa z językami ze znakami diakrytycznymi). Nie uruchomiłem żadnych testów porównawczych, ale myślę, że jest to bardziej wydajne niż tworzenie wyrażenia regularnego. (Ale mogę się mylić, ponieważ wyrażenia regularne są niesamowicie szybkie.)
Daniel 'Dang' Griffith
2
To kończy się niepowodzeniem w przypadku skryptów, które nie rozróżniają wielkich i małych liter, takich jak chiński.
Michael Schmid
@MichaelSchmid, Możemy dodać kontrolę punktu kodu, mówiąc „a” .codePointAt (0) .toString (16). Punkt kodowy powinien być większy niż 127.
Sumer
2
@Sumer, dlaczego to pomogło? To, że punkt kodowy jest powyżej 127, nie oznacza, że ​​jest to litera.
Michael Schmid
8

ES6 obsługuje wyrażenia regularne obsługujące Unicode.

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

Działa to dla wszystkich alfabetów.

Niestety, w Firefoksie jest błąd (zostanie naprawiony w wersji 78), który uniemożliwia jego powszechne użycie. Ale jeśli możesz kontrolować swoje środowisko uruchomieniowe i obsługuje je (np. Node.js), jest to proste, kompleksowe rozwiązanie.

Alternatywnie, XRegExp zapewnia wypełnienie nowoczesnych wyrażeń regularnych dla wszystkich przeglądarek.

Michael Schmid
źródło
4

A co z użyciem kodów ASCII?

let n = str.charCodeAt(0);
let strStartsWithALetter = (n >= 65 && n < 91) || (n >= 97 && n < 123);
fmg
źródło
2
Działa idealnie w mało prawdopodobnym przypadku, gdy przetwarzasz tylko teksty w języku angielskim. (Założenie, które jest błędne dla prawie każdego systemu.)
Michael Schmid
Gdy znaki są łatwe do odczytania (jak ma to miejsce w tym przypadku), pisanie kodów Ascii lub Unicode (np. 65 zamiast „A”) jest złą praktyką, ponieważ jest nieczytelne. Zobacz inne odpowiedzi, jak napisać to poprawnie.
Philippe-André Lorin
2

To rozwiązanie działa ze znakami specjalnymi też, na przykład é, è, ê, ü, ö,à

2 kroki:

  1. Usuń akcenty na podstawie tej odpowiedzi: Usuń akcenty / znaki diakrytyczne w ciągu znaków w JavaScript
  2. Sprawdź, czy znak od a do z, używając regex lub Unicode (do wyboru)

Prezentacje na żywo mojego rozwiązania:

  1. przy użyciu funkcji globalnych
  2. przy użyciu wzorca modułu javascript

Uwaga : opublikowałem rozwiązanie, które wykorzystuje funkcje globalne, ponieważ jest prawdopodobnie najłatwiejsze do zrozumienia. Ale spójrz na „wzorzec modułu javascript”, jeśli chcesz lepszy kod (czystszy, łatwiejszy w utrzymaniu i rozszerzaniu), zobacz Impressivewebs.com/my-current-javascript-design-pattern, a także ten film na YouTube (prezentacja Paula Irisha).

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
źródło
6
Wygląda na to, że nie działa ze znakami chińskimi ani japońskimi
Notre
10
to tak, jakby powiedzieć, że niebo jest niebieskie
Adrien Be
0

Piszę tutaj, ponieważ nie chciałem zadawać nowego pytania. Zakładając, że w kodzie nie ma żadnych deklaracji pojedynczego znaku, możesz eval () znak wywołać błąd i sprawdzić typ znaku. Coś jak:

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
źródło
Jeśli twój test zwraca prawdę dla podkreśleń, to nie jest użyteczny.
Jérôme Verstrynge
Wprowadza to potencjalne zagrożenie bezpieczeństwa związane z wstrzyknięciem kodu. Używaj ostrożnie, jeśli w ogóle.
Michael Schmid
0

Można dowiedzieć się, czy znak jest literą, czy nie, używając standardowej funkcji wbudowanej isNaN lub Number.isNaN () z ES6:

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

Powtarza prawdę, jeśli podana wartość nie jest liczbą, w przeciwnym razie fałsz.

Alexa-905
źródło
Sprytne, ale nie jestem pewien, czy to wystarczająca odpowiedź ... Również Marc zasugerował to w komentarzach ...
Garrett Motzner
var sn = "string indijf &"; var nn = isNaN (sn) document.getElementById ("demo"). innerHTML = nn; Podaję cyfry lub znaki specjalne nadal zwracają prawdę. czy możesz dodać więcej szczegółów odpowiedzi
Mr S Coder
W którym alfabecie „-” jest literą?
Michael Schmid
0

Więc otrzymaliśmy pierwszy znak używając charArt()funkcji, a następnie spróbuj dopasować ir używając wyrażenia regularnego, aby sprawdzić, czy istnieje mała litera zaczynająca się od a do z i zwróć ją jako wynikboolean

Boolean('#Foo'.charAt(0).match(/[a-zA-Z]/)) // false
Boolean('Foo'.charAt(0).match(/[a-zA-Z]/)) // true
FDisk
źródło
Czy mógłbyś podać krótkie wyjaśnienie lub opis Kodeksu? Tylko kod odpowiedzi są odradzane.
Nimantha
Litera to nie tylko litery od a do z. Angielski jest dość ważnym językiem, tak, a nawet angielski nie używa TYLKO od a do z.
Gábor
-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
źródło
1
Obecnie Unicode ma 128 000 znaków obejmujących 135 alfabetów. Te 26 to naprawdę niewielki podzbiór z nich.
Michael Schmid
-1

Zrobiłem funkcję, aby to zrobić:

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

Zasadniczo weryfikuje to w tabeli ASCII, czy kod znaku odnosi się do litery.

Możesz zobaczyć tabelę ASCII pod tym linkiem i porównać kolumny DEC (gdzie jest kod) i symbol : https://www.ascii-code.com/

Uwaga: Moja funkcja jest prawdziwa tylko dla "prostych" liter (rzeczy takie jak "Á", "é", "ç", "Ü" zwróci fałsz ... ale jeśli potrzebujesz, możesz dostosować tę funkcję do innych warunków ).

PedroProgrammer
źródło
-1

Możemy również sprawdzić w prosty sposób:

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
źródło