如何检查字符是否是Javascript中的字母?

IT技术 javascript string character letter
2021-01-23 17:26:20

我正在使用以下命令提取 Javascript 字符串中的字符:

var first = str.charAt(0);

我想检查它是否是一封信。奇怪的是,Javascript 中似乎不存在这样的功能。至少我找不到它。

我该如何测试?

6个回答

我不相信有一个内置的功能。但是用正则表达式编写很容易

function isLetter(str) {
  return str.length === 1 && str.match(/[a-z]/i);
}
您仍然可以使用正则表达式并根据需要添加更多细节: str.match(/[AZ|az|ü|é]/i); //等等
2021-03-18 17:26:20
@YiboYang - 不,转到上面的 jsbin 链接,将其更改为您的链接并运行它,然后得到:“是 'u' 是一个字母?真的”“是 'ü' 是一个字母?假”“是 'à ' 是一个字母吗?假”用你的代码。
2021-03-18 17:26:20
该代码仅测试字符是否是从 a 到 z 的基本字母之一(很少有语言仅使用这些字母编写)。这与之前提到的 Java 函数非常不同。
2021-03-22 17:26:20
应该注意这实际上并没有返回 true || 正如人们所料,这是错误的。如果str是来自 az 的值,则返回该值。否则返回空值。如果您需要它返回真/假,请使用它。 isLetter: function (str) { if (str.length !== 1 && str.match(/[a-z]/i)) { return true; } return false; },
2021-04-01 17:26:20
Soooooo 这个结果没有返回真值或假值,这是我所关心的......这可以通过更改return str.length === 1 && str.match(/[a-z]/i);return str.length === 1 && !!str.match(/[a-z]/i);. 如果这是您想要纳入您的答案的内容。还是点赞了。
2021-04-05 17:26:20

对于那些没有被简单检查(例如 )考虑在内的特殊字符/[a-zA-Z]/.test(c),利用 ECMAScript 大小写转换 ( toUpperCase)可能是有益的它将考虑一些外国字母的非 ASCII Unicode 字符类。

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

注意:此解决方案仅适用于大多数拉丁文、希腊文、亚美尼亚文和西里尔文脚本。它不适用于中文、日语、阿拉伯语、希伯来语和大多数其他脚本。

出色的解决方案。在 c = '1a' 的情况下,只需将您的字符串拆分为数组和循环,例如,` function isLetters(arr) { for (var i = 0; i < arr.length; i++) { if(arr[i]. toLowerCase() != arr[i].toUpperCase()){ } else { return false; 返回真;}`
2021-03-17 17:26:20
伟大(和聪明)的代码。适用于所有拉丁字母。
2021-03-18 17:26:20
我个人喜欢这样的函数,因为它比正则表达式函数更容易浏览和理解
2021-03-21 17:26:20
聪明的。但基于我非常有限的理解,它不适用于没有大写和小写的字母,如中文或日文
2021-04-04 17:26:20
与基于/[a-z]/i模式的解决方案相比,此技巧将接受完整范围的拉丁字符。与包含完整拉丁语 Unicode 上下映射的其他解决方案相比,您可以节省 99.2% 的代码大小。将此解决方案称为“错误”是一种误导,因为这取决于您的问题。如果您的范围是拉丁字符集,这是一种简洁而优雅的解决方法。
2021-04-07 17:26:20
if( char.toUpperCase() != char.toLowerCase() ) 

只有在字母的情况下才会返回真

正如在下面的评论中指出的那样,如果您的字符是非英语、高 Ascii 或双字节范围,那么您需要添加代码点检查。

if( char.toUpperCase() != char.toLowerCase() || char.codePointAt(0) > 127 )
@MichaelSchmid,我们可以添加代码点检查说“a”.codePointAt(0).toString(16)。代码点应大于 127。
2021-03-16 17:26:20
@Sumer,为什么会有帮助?仅仅因为代码点高于 127 并不意味着它是一个字母。
2021-03-19 17:26:20
对于不区分大小写的脚本,如中文,这将失败。
2021-04-10 17:26:20
只是为了添加两便士,如果将其转换为函数,请添加检查是否为字符串并强制长度为一或确保长度为一。1a例如,这是为了防止
2021-04-14 17:26:20
@AnchovyLegend 它之所以有效,是因为没有数字、标点符号和其他非字母字符的大写和小写版本。换句话说,它们的大小写相同,而字母的大小写不同。就个人而言,我喜欢这种技术,因为它独立于语言(它适用于带有变音符号的语言)。我没有运行任何基准测试,但我猜这比构建正则表达式更有效。(但我可能是错的,因为正则表达式的速度非常快。)
2021-04-14 17:26:20

ES6 支持 unicode-aware 正则表达式。

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

这适用于所有字母。

不幸的是,Firefox 中存在一个错误(将在版本 78 中修复)阻止它被普遍使用。但是,如果您可以控制您的运行时环境并且它支持它(例如 Node.js),那么这是一个简单而全面的解决方案。

或者,XRegExp为所有浏览器提供了现代正则表达式的polyfill

我相信这个插件有你想要的功能:http : //xregexp.com/plugins/(github 链接:https : //github.com/slevithan/xregexp

有了它,您可以简单地将所有 unicode 字母与\p{L}.

阅读此源文件的标题以查看它支持哪些类别:http : //xregexp.com/plugins/xregexp-unicode-categories.js

投反对票,因为这对于 2019 年肯定是一个糟糕的答案
2021-03-15 17:26:20
你有在你工作的项目中使用这个插件的经验吗?(只是想知道这个库有多可靠)
2021-03-18 17:26:20
@Peter 您能否链接一个您认为适合 2019 年的答案?只要其他解决方案适用于所有 Unicode 字符,我就会添加一个链接作为我的答案的编辑。
2021-03-23 17:26:20
如果您不想使用插件并且需要该解决方案在任何版本的 JavaScript 中工作,请考虑我的回答。
2021-04-12 17:26:20