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

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

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

伊昭杰@邮件。商务

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

我们有什么选择? 似乎使用本机(例如基于浏览器)validation就行不通了。

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  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; }; 

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

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

[\ u0041- \ u005A]其中\ u0041A的hex代码,而\ u005AZ的hex代码

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

同样地,我们可以根据unicode.org提供的hex顺序(例如:\ u0A10到\ u0A1F)使用其他Unicode字符或等效的Hex-Code。

试试[电 – 触]

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

我不懂中文:)

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