Javascript只查找英文字母

时间:2010-03-08 16:37:42

标签: 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
    }
 }

感谢您的时间。

5 个答案:

答案 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