Làm thế nào để kiểm tra xem ký tự có phải là một chữ cái trong Javascript hay không?


94

Tôi đang trích xuất một ký tự trong chuỗi Javascript với:

var first = str.charAt(0);

và tôi muốn kiểm tra xem nó có phải là một lá thư không. Thật kỳ lạ, có vẻ như chức năng như vậy không tồn tại trong Javascript. Ít nhất thì tôi không thể tìm thấy nó.

Làm thế nào tôi có thể kiểm tra điều này?


4
Tạo một số và thử nghiệm chống lại NaN? Hoặc chỉ isNan(first)tôi đoán.
Marc

6
@Marc Nếu nhân vật này là '-' ví dụ, thử nghiệm của bạn sẽ không chỉ ra rằng nó là một lá thư ...
Jérôme Verstrynge

2
Xác định "chữ cái"? Chỉ alpha tiếng Anh, hay thứ gì khác? Bạn muốn "danh sách đen" hay "danh sách trắng"?
Wesley Murch

3
@JVerstry không phải ai cũng biết Java. Bạn không thể chỉ cho chúng tôi biết những ký tự nào sẽ được phép?
PeeHaa

1
Tôi thấy rất nhiều người gọi JS Java ở đây. JS và Java không giống nhau, thậm chí không giống nhau. Một cái về cơ bản là một món đồ chơi, cái kia dùng để tạo trang web.
Ian Wise

Câu trả lời:


15

Tôi tin rằng plugin này có các khả năng mà bạn tìm kiếm: http://xregexp.com/plugins/ (liên kết github: https://github.com/slevithan/xregexp )

Với nó, bạn có thể khớp tất cả các chữ cái unicode với \p{L}.

Đọc tiêu đề của tệp nguồn này để xem nó hỗ trợ những danh mục nào: http://xregexp.com/plugins/xregexp-unicode-categories.js


1
Bạn đã có kinh nghiệm sử dụng plugin này cho các dự án bạn đã làm chưa? (chỉ cần tự hỏi như thế nào đáng tin cậy thư viện này là)
Adrien Be

phản đối vì đây chắc chắn là một câu trả lời kém cho năm 2019
Peter

5
@Peter Bạn có thể vui lòng liên kết một câu trả lời mà bạn cho là phù hợp cho năm 2019 không? Tôi sẽ thêm một liên kết vào nó như một bản chỉnh sửa cho câu trả lời của tôi miễn là giải pháp khác hoạt động với tất cả các ký tự Unicode.
bezmax

146

Tôi không tin rằng có một chức năng tích hợp cho điều đó. Nhưng nó đủ dễ để viết bằng regex

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

50
Mã chỉ kiểm tra xem ký tự có phải là một trong những ký tự cơ bản từ a đến z hay không (rất ít ngôn ngữ được viết chỉ sử dụng những ký tự đó). Điều này rất khác với hàm Java đã được đề cập.
Jukka K. Korpela

10
Bạn vẫn có thể sử dụng regex và chỉ cần thêm chi tiết khi cần: str.match (/ [AZ | az | ü | é] / i); // vv
Eli

có lẽ đây là công trình? var char=str.toLowerCase(); return (char.length==1 && char>='a' && char<='z')
Yibo Yang

2
@YiboYang - nope, truy cập liên kết jsbin ở trên, thay đổi nó thành của bạn và chạy nó, và nhận được điều này: "là 'u' là một chữ cái? True" "là 'ü' là một chữ cái? False" "là 'à "là một chữ cái? false" với mã của bạn.
Julix

3
Cần lưu ý rằng điều này không thực sự trả về true || sai như người ta có thể mong đợi. Nếu strlà một giá trị từ az, nó trả về giá trị đó. Nếu không, nó trả về null. Nếu bạn cần nó để trả về true / false, hãy sử dụng nó. isLetter: function (str) { if (str.length !== 1 && str.match(/[a-z]/i)) { return true; } return false; },
Regis

107

Đối với những ký tự đặc biệt không được tính đến bằng các kiểm tra đơn giản hơn, chẳng hạn như /[a-zA-Z]/.test(c), có thể có lợi khi tận dụng phép biến đổi trường hợp ECMAScript ( toUpperCase). Nó sẽ tính đến các lớp ký tự Unicode không phải ASCII của một số bảng chữ cái nước ngoài.

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

LƯU Ý: giải pháp này sẽ chỉ hoạt động với hầu hết các chữ viết Latinh, Hy Lạp, Armenia và Cyrillic. Nó sẽ KHÔNG hoạt động với tiếng Trung, tiếng Nhật, tiếng Ả Rập, tiếng Do Thái và hầu hết các chữ viết khác.


15
Tài giỏi. Nhưng dựa trên hiểu biết rất hạn chế của tôi, nó không hoạt động với các bảng chữ cái không có chữ hoa và chữ thường, như tiếng Trung hoặc tiếng Nhật
Notre

3
mã tuyệt vời (và thông minh). Hoạt động với tất cả các bảng chữ cái dựa trên Latinh.
fvlinden

1
Cá nhân tôi thích các hàm như thế này vì nó dễ xem và hiểu hơn nhiều so với các hàm regex
Djave

3
giải pháp tuyệt vời. Trong trường hợp c = '1a', chỉ cần chia chuỗi của bạn thành mảng và vòng lặp, ví dụ: `function isLetters (arr) {for (var i = 0; i <arr.length; i ++) {if (arr [i]. toLowerCase ()! = arr [i] .toUpperCase ()) {} else {return false; }} trả về true; } '
Ronnie Royston

5
So với giải pháp dựa trên một /[a-z]/imẫu, thủ thuật này sẽ chấp nhận toàn bộ các ký tự Latinh. So với giải pháp khác chứa ánh xạ Unicode Latin trên-dưới hoàn chỉnh, bạn tiết kiệm được 99,2% kích thước mã. Sẽ là sai lầm khi gọi giải pháp này là "sai", vì nó phụ thuộc vào vấn đề của bạn. Nếu phạm vi của bạn là bộ ký tự Latinh, đây là một cách đơn giản và thanh lịch để giải quyết nó.
lọc

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

Sẽ chỉ trả về true trong trường hợp thư

Như đã chỉ ra trong nhận xét bên dưới, nếu nhân vật của bạn không phải là tiếng Anh, Ascii cao hoặc dải byte kép thì bạn cần thêm kiểm tra điểm mã.

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

1
chỉ để thêm twopence, nếu biến nó thành một hàm, hãy thêm kiểm tra xem nó có phải là chuỗi không và thực thi độ dài là một hoặc đảm bảo độ dài là một. Đó là để ngăn chặn 1achẳng hạn.
mặc khải

1
@AnchovyLegend Nó hoạt động vì không có phiên bản viết hoa và viết thường của số, dấu câu và các ký tự không phải chữ cái khác. Nói cách khác, chữ hoa và chữ thường của chúng sẽ giống nhau, ngược lại chữ hoa và chữ thường sẽ khác nhau. Cá nhân tôi thích kỹ thuật này vì nó độc lập với ngôn ngữ (nó hoạt động với các ngôn ngữ có dấu phụ). Tôi chưa chạy bất kỳ điểm chuẩn nào, nhưng tôi đoán rằng điều này hiệu quả hơn việc xây dựng regex. (Nhưng tôi có thể nhầm, vì regex nhanh đáng kinh ngạc.)
Daniel 'Dang' Griffith

2
Điều này không thành công đối với các tập lệnh không phân biệt chữ hoa và chữ thường, như tiếng Trung.
Michael Schmid

@MichaelSchmid, Chúng tôi có thể thêm kiểm tra điểm mã nói "a" .codePointAt (0) .toString (16). Điểm mã phải lớn hơn 127.
Sumer

2
@Sumer, tại sao điều đó sẽ giúp ích? Chỉ vì điểm mã trên 127 không có nghĩa là nó là một chữ cái.
Michael Schmid

6

ES6 hỗ trợ các biểu thức chính quy nhận dạng unicode.

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

Điều này hoạt động cho tất cả các bảng chữ cái.

Thật không may, có một lỗi trong Firefox (sẽ được sửa trong phiên bản 78) ngăn điều này được sử dụng phổ biến. Nhưng nếu bạn có thể kiểm soát môi trường thời gian chạy của mình và nó hỗ trợ nó (ví dụ: Node.js), thì đây là một giải pháp đơn giản, toàn diện.

Ngoài ra, XRegExp cung cấp nhiều cụm từ thông dụng hiện đại cho tất cả các trình duyệt.


4

Làm thế nào về việc sử dụng mã ASCII?

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

1
Hoạt động hoàn hảo cho trường hợp không chắc rằng bạn chỉ xử lý văn bản tiếng Anh. (Một giả định sai đối với hầu hết mọi hệ thống.)
Michael Schmid

Khi các ký tự dễ đọc (như trường hợp ở đây), viết mã Ascii hoặc Unicode (ví dụ: 65 thay vì 'A') là một phương pháp không tốt, vì nó không thể đọc được. Xem các câu trả lời khác để biết cách viết đúng.
Philippe-André Lorin

2

Giải pháp này làm việc với các ký tự đặc biệt quá, ví dụ é, è, ê, ü, ö,à

2 bước:

  1. Xóa dấu, dựa trên câu trả lời này: Xóa dấu / dấu phụ trong một chuỗi trong JavaScript
  2. Kiểm tra xem ký tự a đến z, sử dụng regex hoặc unicode (lựa chọn của bạn)

Các bản trình diễn trực tiếp về giải pháp của tôi:

  1. sử dụng các chức năng toàn cầu
  2. sử dụng mô-đun javascript

Lưu ý : Tôi đã đăng giải pháp sử dụng các hàm toàn cục vì nó có lẽ là cách hiểu đơn giản nhất. Nhưng hãy xem xét "mô-đun javascript" nếu bạn muốn có mã tốt hơn (sạch hơn, dễ bảo trì và mở rộng hơn), hãy xem Indianwebs.com/my-current-javascript-design-pattern và cả video YouTube này (bản trình bày của 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
Có vẻ như nó không hoạt động với các ký tự tiếng Trung hoặc tiếng Nhật
Notre

9
nó giống như nói bầu trời trong xanh
Adrien Be

1

Tôi đăng ở đây vì tôi không muốn đăng một câu hỏi mới. Giả sử không có bất kỳ khai báo ký tự đơn nào trong mã, bạn có thể đánh giá () ký tự để gây ra lỗi và kiểm tra loại ký tự. Cái gì đó như:

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;


Nếu thử nghiệm của bạn trả về true cho dấu gạch dưới, thì nó không hữu ích.
Jérôme Verstrynge,

Điều này dẫn đến một mối đe dọa bảo mật tiềm ẩn của việc tiêm mã. Chỉ sử dụng cẩn thận, nếu có.
Michael Schmid

0

Có thể biết ký tự đó có phải là một chữ cái hay không bằng cách sử dụng hàm nội trang chuẩn isNaN hoặc Number.isNaN () từ ES6:

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

Nó trả về true nếu giá trị đã cho không phải là số, ngược lại là false.


Thông minh, nhưng tôi không chắc đó là một câu trả lời đầy đủ ... Ngoài ra, Marc đã đề xuất điều này trong các bình luận ...
Garrett Motzner

var sn = "string indjf &"; var nn = isNaN (sn) document.getElementById ("demo"). innerHTML = nn; Tôi đang chuyển số hoặc các ký tự đặc biệt vẫn trả về true. bạn có thể vui lòng thêm câu trả lời chi tiết hơn không
Mr S Coder

“-” là một chữ cái trong bảng chữ cái nào?
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 hiện có 128 000 ký tự bao gồm 135 bảng chữ cái. 26 người đó là một tập hợp con thực sự nhỏ trong số họ.
Michael Schmid

-1

Tôi đã thực hiện một chức năng để làm điều này:

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

Điều này về cơ bản xác minh trong bảng ASCII nếu mã của ký tự tham chiếu đến một Chữ cái.

Bạn có thể xem bảng ASCII trên liên kết này và so sánh các cột DEC (mã ở đâu) và ký hiệu : https://www.ascii-code.com/

Lưu ý: Hàm của tôi chỉ đúng với các chữ cái "đơn giản" (những thứ như "Á", "é", "ç", "Ü" nó sẽ trả về false ... nhưng nếu cần, bạn có thể điều chỉnh hàm này cho phù hợp với các điều kiện khác ).


-1

Vì vậy, chúng tôi có một ký tự đầu tiên bằng cách sử dụng charArt()hàm, sau đó thử so khớp ir bằng cách sử dụng biểu thức chính quy để kiểm tra xem có một ký tự viết thường bắt đầu từ a đến z hay không và trả về kết quả làboolean

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

Bạn có thể giải thích hoặc mô tả ngắn gọn về Quy tắc không? Câu trả lời chỉ có mã không được khuyến khích.
Nimantha

-1

Chúng tôi cũng có thể kiểm tra theo cách đơn giản như:

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


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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.