Javascript只查找英文字母

Ale*_*art 3 javascript jquery

我试图找到一些文本,只有它包含使用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
    }
 }
Run Code Online (Sandbox Code Playgroud)

感谢您的时间.

Poi*_*nty 19

这个的正则表达式可能是:

var english = /^[A-Za-z0-9]*$/;
Run Code Online (Sandbox Code Playgroud)

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

if (english.test(names[i])) // ...
Run Code Online (Sandbox Code Playgroud)

另见:正则表达式匹配非英文字符?

编辑我的大脑过滤掉了"我不想使用正则表达式",因为它失败了"isSilly()"测试.您可以随时在单词的每个字母的字符代码,但是这将是慢(也许很多不是让正则表达式匹配的工作慢).内置的正则表达式引擎非常快.

当你担心性能时,在做出关于技术的假设之前,总是先做一些简单的测试(除非你已经对这项技术有了深入的了解).


T.J*_*der 5

如果您坚决反对使用正则表达式,您可以这样做:

// Whatever valid characters you want here
var ENGLISH = {};
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".split("").forEach(function(ch) {
    ENGLISH[ch] = true;
});

function stringIsEnglish(str) {
    var index;

    for (index = str.length - 1; index >= 0; --index) {
        if (!ENGLISH[str.substring(index, index + 1)]) {
            return false;
        }
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

实例:

// Whatever valid characters you want here
var ENGLISH = {};
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".split("").forEach(function(ch) {
    ENGLISH[ch] = true;
});

function stringIsEnglish(str) {
    var index;

    for (index = str.length - 1; index >= 0; --index) {
        if (!ENGLISH[str.substring(index, index + 1)]) {
            return false;
        }
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

...但是正则表达式 ( /^[a-z0-9]*$/i.test(str)) 几乎肯定会更快。它在这个综合基准中,但这些通常是不可靠的。


vsy*_*ync 5

迭代字符串中的每个字符并检查关键代码是否不在65之间,122即拉丁字母、小写和大写。

\n

如果希望添加标点符号,请将其keyCode添加到支票中。

\n

\r\n
\r\n
function isLatinString(s) {\n  var i, charCode;\n  for (i = s.length; i--;) {\n    charCode = s.charCodeAt(i)\n    if (charCode < 65 || charCode > 122)\n      return charCode\n  }\n  return true\n}\n\n// tests\n[\n  "abxSDSzfgr", \n  "aAzZ123dsfsdf\xd7\xa2\xd7\x97\xd7\x9c\xd7\xa2\xd7\x9c\xd7\x97\xd7\x99", \n  "abc!", \n  "$abc", \n  "123abc",\n  " abc"\n]\n.forEach(s => console.log(   isLatinString(s), s   ))
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n

另一种方法是使用显式白名单字符串来允许特定字符:

\n

\r\n
\r\n
function isLatinString(s){\n  var c, whietlist = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"\n  for( c in s ) // get each character in the argument string\n    // if whitelist string doesn\'t include the character, break\n    if( !whietlist.includes(s[c].toUpperCase()) ) \n      return false\n  return true\n}\n\n// tests\n[\n  "abCD", \n  "aA\xd7\x90\xd7\x91", \n  "abc!", \n  "$abc", \n  "1abc",\n  " abc"\n]\n.forEach(s => console.log(   isLatinString(s), s   ))
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n