Bagaimana cara memeriksa apakah karakter adalah huruf di Javascript?

94

Saya mengekstrak karakter dalam string Javascript dengan:

var first = str.charAt(0);

dan saya ingin memeriksa apakah itu sebuah surat. Anehnya, tampaknya fungsi seperti itu tidak ada di Javascript. Setidaknya saya tidak dapat menemukannya.

Bagaimana saya bisa menguji ini?

Jérôme Verstrynge
sumber
4
Buat nomor dan uji NaN? Atau hanya isNan(first)saya rasa.
Marc
6
@Marc Jika karakter ini adalah '-' misalnya, pengujian Anda tidak akan menunjukkan bahwa itu adalah huruf ...
Jérôme Verstrynge
2
Tentukan "huruf"? Hanya alfa bahasa Inggris, atau yang lainnya? Apakah Anda ingin "daftar hitam" atau "daftar putih"?
Wesley Murch
3
@JVerstudio tidak semua orang tahu Java. Tidak bisakah Anda memberi tahu kami karakter apa yang akan diizinkan?
PeeHaa
1
Saya melihat banyak orang memanggil JS Java di sini. JS dan Java bukanlah hal yang sama, bahkan tidak dekat. Satu pada dasarnya adalah mainan, yang lainnya untuk membuat situs web.
Ian Wise

Jawaban:

15

Saya yakin plugin ini memiliki kemampuan yang Anda cari: http://xregexp.com/plugins/ (tautan github: https://github.com/slevithan/xregexp )

Dengan itu Anda bisa mencocokkan semua huruf unicode dengan \p{L}.

Baca tajuk file sumber ini untuk melihat kategori mana yang didukungnya: http://xregexp.com/plugins/xregexp-unicode-categories.js

bezmax.dll
sumber
1
Apakah Anda memiliki pengalaman menggunakan plugin ini pada proyek yang Anda kerjakan? (hanya ingin tahu seberapa andal perpustakaan ini)
Adrien Be
downvoting karena ini tentu saja merupakan jawaban yang buruk untuk 2019
Peter
5
@Peter Bisakah Anda menautkan jawaban yang Anda anggap cocok untuk 2019? Saya akan menambahkan tautan ke sana sebagai pengeditan pada jawaban saya selama solusi lain berfungsi dengan semua karakter Unicode.
bezmax
146

Saya tidak percaya ada fungsi bawaan untuk itu. Tapi cukup mudah untuk menulis dengan regex

function isLetter(str) {
  return str.length === 1 && str.match(/[a-z]/i);
}
JaredPar
sumber
50
Kode hanya menguji apakah karakter tersebut adalah salah satu huruf dasar dari a sampai z (sangat sedikit bahasa yang ditulis hanya menggunakan huruf tersebut). Ini sangat berbeda dengan fungsi Java yang telah disebutkan.
Jukka K. Korpela
11
Anda masih dapat menggunakan regex dan menambahkan lebih banyak detail saat Anda membutuhkannya: str.match (/ [AZ | az | ü | é] / i); // dll
Eli
mungkin ini berhasil? var char=str.toLowerCase(); return (char.length==1 && char>='a' && char<='z')
Yibo Yang
2
@YiboYang - tidak, buka tautan jsbin di atas, ubah ke milik Anda dan jalankan, dan dapatkan ini: "apakah 'u' adalah surat? Benar" "apakah 'ü' adalah surat? Salah" "adalah 'à 'is a letter? false "Dengan kode Anda.
Julix
3
Perlu dicatat bahwa ini sebenarnya tidak mengembalikan true || salah seperti yang diharapkan. Jika stradalah nilai dari az ia mengembalikan nilai itu. Jika tidak, ia mengembalikan nol. Jika Anda membutuhkannya untuk mengembalikan true / false gunakan ini. isLetter: function (str) { if (str.length !== 1 && str.match(/[a-z]/i)) { return true; } return false; },
Regis
107

Sehubungan dengan karakter khusus yang tidak diperhitungkan oleh pemeriksaan sederhana seperti /[a-zA-Z]/.test(c), dapat bermanfaat untuk memanfaatkan transformasi kasus ECMAScript ( toUpperCase). Ini akan memperhitungkan kelas karakter Unicode non-ASCII dari beberapa huruf asing.

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

CATATAN: solusi ini hanya akan berfungsi untuk sebagian besar skrip Latin, Yunani, Armenia, dan Sirilik. Ini TIDAK akan berfungsi untuk skrip Cina, Jepang, Arab, Ibrani, dan sebagian besar skrip lainnya.

filip
sumber
15
Pintar. Tetapi berdasarkan pemahaman saya yang sangat terbatas, itu tidak berfungsi dengan huruf yang tidak memiliki huruf besar dan kecil, seperti Cina atau Jepang
Notre
3
kode yang hebat (dan pintar). Bekerja dengan semua huruf berbasis Latin.
fvlinden
1
Secara pribadi saya suka fungsi seperti ini karena jauh lebih mudah untuk dilihat dan dipahami daripada fungsi regex
Djave
3
solusi brilian. Dalam kasus c = '1a', cukup pisahkan string Anda menjadi array dan loop, misalnya, `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
Dibandingkan dengan solusi berdasarkan /[a-z]/ipola, trik ini akan menerima rangkaian lengkap karakter Latin. Dibandingkan dengan solusi lain yang berisi pemetaan atas-bawah Latin Unicode lengkap, Anda menghemat 99,2% dalam ukuran kode. Menyesatkan untuk menyebut solusi ini "salah", karena tergantung pada masalah Anda. Jika cakupan Anda adalah himpunan karakter Latin, ini adalah cara yang ramping dan elegan untuk menyelesaikannya.
filip
28
if( char.toUpperCase() != char.toLowerCase() ) 

Akan mengembalikan true hanya dalam kasus surat

Seperti yang ditunjukkan dalam komentar di bawah ini, jika karakter Anda bukan bahasa Inggris, Ascii Tinggi atau rentang byte ganda maka Anda perlu menambahkan centang untuk titik kode.

if( char.toUpperCase() != char.toLowerCase() || char.codePointAt(0) > 127 )
Sumeria
sumber
1
hanya untuk menambahkan dua bagian, jika mengubahnya menjadi sebuah fungsi, tambahkan tanda centang apakah itu string dan paksakan panjangnya menjadi satu atau pastikan panjangnya satu. Itu untuk mencegah 1amisalnya.
Bersenang
1
@AnchovyLegend Ini berfungsi karena tidak ada versi huruf besar dan huruf kecil dari angka, tanda baca, dan karakter non-alfabet lainnya. Dengan kata lain, huruf besar dan kecil akan sama, sedangkan huruf besar dan kecil akan berbeda. Secara pribadi, saya suka teknik ini karena tidak bergantung pada bahasanya (ini bekerja dengan bahasa dengan tanda diakritik). Saya belum menjalankan tolok ukur apa pun, tetapi menurut saya ini lebih efisien daripada membuat regex. (Tapi saya bisa saja salah, karena ekspresi reguler sangat cepat.)
Daniel 'Dang' Griffith
2
Ini gagal untuk skrip yang tidak membedakan antara huruf besar dan kecil, seperti bahasa China.
Michael Schmid
@MichaelSchmid, Kita dapat menambahkan cek titik kode mengatakan "a" .codePointAt (0) .toString (16). Titik kode harus lebih besar dari 127.
Sumer
2
@ Konsumen, mengapa itu membantu? Hanya karena titik kode di atas 127 tidak berarti itu adalah huruf.
Michael Schmid
6

ES6 mendukung ekspresi reguler peka-unicode.

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

Ini berfungsi untuk semua huruf.

Sayangnya, ada bug di Firefox (akan diperbaiki di versi 78) yang mencegah ini digunakan secara universal. Tetapi jika Anda dapat mengontrol lingkungan runtime dan mendukungnya (misalnya Node.js), ini adalah solusi yang langsung dan komprehensif.

Secara alternatif, XRegExp menyediakan polyfill ekspresi reguler modern untuk semua browser.

Michael Schmid
sumber
4

Bagaimana kalau menggunakan kode ASCII?

let n = str.charCodeAt(0);
let strStartsWithALetter = (n >= 65 && n < 91) || (n >= 97 && n < 123);
fmg
sumber
1
Berfungsi sempurna untuk kasus yang jarang terjadi bahwa Anda hanya memproses teks bahasa Inggris. (Asumsi yang salah untuk hampir setiap sistem.)
Michael Schmid
Ketika karakter mudah dibaca (seperti yang terjadi di sini), menulis kode Ascii atau Unicode (misalnya 65 bukannya 'A') adalah praktik yang buruk, karena tidak dapat dibaca. Lihat jawaban lain untuk cara menulis ini dengan benar.
Philippe-André Lorin
2

Solusi ini bekerja dengan karakter khusus juga, misalnya é, è, ê, ü, ö,à

2 langkah:

  1. Hapus aksen, berdasarkan jawaban ini: Hapus aksen / diakritik dalam string di JavaScript
  2. Periksa apakah karakter a sampai z, menggunakan regex atau unicode (pilihan Anda)

Demo langsung dari solusi saya:

  1. menggunakan fungsi global
  2. menggunakan pola modul javascript

Catatan : Saya memposting solusi yang menggunakan fungsi global karena itu mungkin yang paling sederhana untuk dipahami. Tetapi lihatlah "pola modul javascript" jika Anda menginginkan kode yang lebih baik (lebih bersih, lebih mudah dirawat dan diperluas), lihat impressionivewebs.com/my-current-javascript-design-pattern dan juga video YouTube ini (presentasi oleh 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
sumber
6
Tampaknya tidak berfungsi dengan karakter China atau Jepang
Notre
9
itu seperti mengatakan langit itu biru
Adrien Be
1

Saya memposting di sini karena saya tidak ingin memposting pertanyaan baru. Dengan asumsi tidak ada deklarasi karakter tunggal dalam kode, Anda dapat mengevaluasi () karakter yang menyebabkan kesalahan dan memeriksa jenis karakter. Sesuatu seperti:

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
sumber
Jika pengujian Anda mengembalikan nilai true untuk garis bawah, maka itu tidak berguna.
Jérôme Verstrynge
Ini memperkenalkan potensi ancaman keamanan injeksi kode. Gunakan hanya dengan hati-hati, jika sama sekali.
Michael Schmid
0

Ini mungkin untuk mengetahui apakah karakter adalah surat atau tidak dengan menggunakan standar builtin fungsi Isnan atau Number.isNaN () dari ES6:

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

Ini kembali benar jika nilai yang diberikan bukan angka, sebaliknya salah.

Alexa-905
sumber
Pintar, tapi saya tidak yakin itu jawaban yang cukup ... Juga, Marc menyarankan ini di komentar ...
Garrett Motzner
var sn = "string indijf &"; var nn = isNaN (sn) document.getElementById ("demo"). innerHTML = nn; Saya melewati angka atau karakter khusus masih mengembalikan true. dapatkah Anda menambahkan lebih detail jawaban
Mr S Coder
Dalam alfabet manakah “-” itu huruf?
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
sumber
1
Unicode saat ini memiliki 128.000 karakter yang mencakup 135 huruf. 26 itu adalah bagian yang sangat kecil dari mereka.
Michael Schmid
-1

Saya membuat fungsi untuk melakukan ini:

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

Ini pada dasarnya memverifikasi dalam tabel ASCII jika kode karakter mengacu pada Surat.

Anda dapat melihat tabel ASCII di tautan ini dan membandingkan kolom DEC (di mana kode) dan simbol : https://www.ascii-code.com/

Catatan: Fungsi saya benar hanya untuk huruf "sederhana" (hal-hal seperti "Á", "é", "ç", "Ü" ini akan mengembalikan nilai salah ... tetapi jika perlu, Anda dapat menyesuaikan fungsi ini dengan de kondisi lain ).

PedroProgrammer
sumber
-1

Jadi kita mendapat karakter pertama menggunakan charArt()fungsi kemudian mencoba mencocokkan ir menggunakan ekspresi reguler untuk memeriksa apakah ada huruf kecil mulai dari a hingga z dan mengembalikan hasilnya sebagai aboolean

Boolean('#Foo'.charAt(0).match(/[a-zA-Z]/)) // false
Boolean('Foo'.charAt(0).match(/[a-zA-Z]/)) // true
FDisk
sumber
Bisakah Anda memberikan penjelasan atau deskripsi singkat tentang Kode? Jawaban hanya kode tidak disarankan.
Nimantha
-1

Kami juga dapat memeriksa dengan cara sederhana seperti:

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
sumber