Javascript 查找是否只有英文字母

新手上路,请多包涵

我正在尝试仅使用 Javascript/jQuery 查找包含英文字母和数字的文本。

我想知道最有效的方法是什么?由于可能有数千个单词,它应该尽可能快,我不想使用正则表达式。

  var names[0] = 'test';
 var names[1] = 'हिन';
 var names[2] = 'لعربية';

 for (i=0;i<names.length;i++) {
    if (names[i] == ENGLISHMATCHCODEHERE) {
        // do something here
    }
 }

感谢您的时间。

原文由 Alec Smart 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 579
2 个回答

一个正则表达式可能是:

 var english = /^[A-Za-z0-9]*$/;

现在,我不知道您是否想要包含空格之类的东西;可以扩展正则表达式。你会像这样使用它:

 if (english.test(names[i])) // ...

另见: Regular expression to match non-English characters?

编辑 我的大脑过滤掉了“我不想使用正则表达式”,因为它没有通过“isSilly()”测试。您始终可以检查单词中每个字母的字符代码,但这比让正则表达式匹配器工作要慢(可能慢 得多)。内置的正则表达式引擎非常快。

当您担心性能时,请始终先进行一些简单的测试,然后再对技术做出假设(除非您已经非常了解该技术)。

原文由 Pointy 发布,翻译遵循 CC BY-SA 3.0 许可协议

遍历字符串中的每个字符,检查键码是否 不在 65122 之间,分别是拉丁字母,小写和大写。

如果希望添加标点字符, 请将其 keyCode 添加 到检查中。

 function isLatinString(s) {
  var i, charCode;
  for (i = s.length; i--;) {
    charCode = s.charCodeAt(i)
    if (charCode < 65 || charCode > 122)
      return charCode
  }
  return true
}

// tests
[
  "abxSDSzfgr",
  "aAzZ123dsfsdfעחלעלחי",
  "abc!",
  "$abc",
  "123abc",
  " abc"
]
.forEach(s => console.log(   isLatinString(s), s   ))

另一种方式,使用明确的白名单字符串来允许特定的字符:

 function isLatinString(s){
  var c, whietlist = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  for( c in s ) // get each character in the argument string
    // if whitelist string doesn't include the character, break
    if( !whietlist.includes(s[c].toUpperCase()) )
      return false
  return true
}

// tests
[
  "abCD",
  "aAאב",
  "abc!",
  "$abc",
  "1abc",
  " abc"
]
.forEach(s => console.log(   isLatinString(s), s   ))

原文由 vsync 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏