我试图找到一些文字,只要它包含使用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
}
}
感谢您的时间。
答案 0 :(得分:14)
这个的正则表达式可能是:
var english = /^[A-Za-z0-9]*$/;
现在,我不知道你是否想要包含空格和类似的东西;正则表达式可以扩展。你会这样使用它:
if (english.test(names[i])) // ...
另见:Regular expression to match non-English characters?
编辑我的大脑过滤掉了“我不想使用正则表达式”,因为它未通过“isSilly()”测试。您可以随时检查单词中每个字母的字符代码,但这比使正则表达式匹配器工作要慢(可能多慢)。内置的正则表达式引擎非常快。
当你担心性能时,在做出关于技术的假设之前,总是先做一些简单的测试(除非你已经熟悉了这项技术)。
答案 1 :(得分:3)
如果您已经决定使用正则表达式,那么可以执行以下操作:
// Whatever valid characters you want here
var ENGLISH = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
function stringIsEnglish(str) {
var index;
for (index = str.length - 1; index >= 0; --index) {
if (ENGLISH.indexOf(str.substring(index, index + 1)) < 0) {
return false;
}
}
return true;
}
......但正则表达式几乎肯定会更快。
答案 2 :(得分:1)
使用正则表达式是最恐怖的方法。据我所知,这应该是最快的算法:
var names = 'test',
var names[1] = 'हिन';
var names[2] = 'لعربية';
//algorithm follows
var r = /^[a-zA-Z0-9]+$/,
i = names.length;
while (--i) {
if (r.test(names[i])) {
// do something here
}
}
答案 3 :(得分:0)
您应该考虑可能包含特殊字符的单词。例如{it's},不是英文吗?
答案 4 :(得分:0)
var string = "aAzZ123dsfsdfעחלעלחי";
function englishString(s){
var i, charCode;
for (i = s.length; i--;) {
charCode = s.charCodeAt(i);
if (charCode < 65 || charCode > 122)
return false;
}
return true;
}
englishString(string); // false
englishString('abxSDSzfgr'); // true