我试图找到一些文本,只有它包含使用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()"测试.您可以随时在单词的每个字母的字符代码,但是这将是慢(也许很多不是让正则表达式匹配的工作慢).内置的正则表达式引擎非常快.
当你担心性能时,在做出关于技术的假设之前,总是先做一些简单的测试(除非你已经对这项技术有了深入的了解).
如果您坚决反对使用正则表达式,您可以这样做:
// 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)) 几乎肯定会更快。它在这个综合基准中,但这些通常是不可靠的。
迭代字符串中的每个字符并检查关键代码是否不在和65之间,122即拉丁字母、小写和大写。
如果希望添加标点符号,请将其keyCode添加到支票中。
\nfunction 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另一种方法是使用显式白名单字符串来允许特定字符:
\nfunction 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