使用jQuery和RegEx进行多语言电子邮件地址验证

时间:2014-03-31 23:58:02

标签: jquery regex validation multilingual email-validation

我有一些jQuery和RegEx代码可以很好地验证验证电子邮件地址 ...只要地址基于简单的拉丁字符。但是,当我们插入更复杂的多语言电子邮件地址时,我们的检查将无法使用基于正则表达式的本机HTML5验证和验证。

以下是我们用于测试的中文电子邮件地址:

伊昭杰@邮件。商务

这是JS验证代码(我没有费心去除名称空间和内部实用程序方法)。我们有一个隐藏的HTML5输入控件,类型为“email”,我们将电子邮件地址传递给该控件,让浏览器发挥其魔力。否则,我们使用正则表达式。

我们有什么选择?似乎使用原生(例如基于浏览器)验证就行不通了。

um.utils.isValidEmail = function (sEmail) {
    var r = false;
    var $emailTester = {};
    var emailRegex;
    //-----

    if (Modernizr.inputtypes.email === true) {
        // Defer to native HTML5 email validation using a hidden <input type='email'> control
        $emailTester = $("#idEmailTester");
        um.utils.assertSize($emailTester);

        $emailTester.val(sEmail);
        r = $emailTester[0].checkValidity();
    } else {
        // Use a regular expression to do email validation
        // Attribution http://www.regular-expressions.info/email.html
        emailRegex = /^[a-zA-Z0-9.!#$%&'*+\/=?\^_`{|}~\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?)*$/;
        r = emailRegex.test(sEmail);
    }

    return r;
};

2 个答案:

答案 0 :(得分:1)

对于使用Unicode的任何语言,有一种非常简单的方法可以应用所有RegEx逻辑(可以用英语轻松应用)。

为了匹配一系列Unicode字符,如所有字母[A-Za-z],我们可以使用

  

[\ u0041- \ u005A]其中 \ u0041 A 的十六进制代码, \ u005A 的十六进制代码ž

'matchCAPS leTTer'.match(/[\u0041-\u005A]+/g)
//output ["CAPS", "TT"]

同样地,我们可以根据unicode.org提供的十六进制顺序(例如:\ u0A10到\ u0A1F)使用其他Unicode字符或等效的十六进制代码

尝试 [电 - 触]

如果由unicode.org按此顺序提供,它将匹配电和触之间的所有字符

我不懂中文:)

答案 1 :(得分:0)

查看XRegExp库。它是一个Javascript库,它实现了一个支持Unicode的正则表达式引擎,包括\p{Letter}之类的字符类,可用于匹配常用ASCII范围之外的字母。