如何在JavaScript中validation电子邮件地址?

如何在JavaScript中validation电子邮件地址?

使用正则expression式可能是最好的方法。 你可以在这里看到一堆testing(取自铬 )

function validateEmail(email) { var re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; return re.test(email); } 

以下是接受unicode的常规expression式的示例:

 var re = /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i; 

但请记住,不应只依靠JavaScriptvalidation。 JavaScript可以很容易地被禁用。 这应该在服务器端进行validation。

以下是上述实例的一个例子:

 function validateEmail(email) { var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; return re.test(email); } function validate() { $("#result").text(""); var email = $("#email").val(); if (validateEmail(email)) { $("#result").text(email + " is valid :)"); $("#result").css("color", "green"); } else { $("#result").text(email + " is not valid :("); $("#result").css("color", "red"); } return false; } $("#validate").bind("click", validate); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <form> <p>Enter an email address:</p> <input id='email'> <button type='submit' id='validate'>Validate!</button> </form> <h2 id='result'></h2> 

只是为了完整性, 在这里你有另一个符合RFC 2822的正则expression式

官方标准被称为RFC 2822 。 它描述了有效的电子邮件地址必须遵守的语法。 你可以( 但你不应该 阅读 )用这个正则expression式来实现它:

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

(…)如果我们省略使用双引号和方括号的语法,我们得到一个更实际的RFC 2822的实现。 它仍然会匹配今天实际使用的所有电子邮件地址的99.99%。

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?

你可以做的进一步的改变是允许任何两个字母的国家代码顶级域名,只允许特定的通用顶级域名。 这个正则expression式会过滤像asdf@adsf.adsf这样的虚拟电子邮件地址 。 您将需要更新它作为新的顶级域名被添加

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+(?:[AZ]{2}|com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum)\b

所以即使遵循官方的标准,也还是要进行权衡。 不要盲目复制在线图书馆或论坛的正则expression式。 始终在您自己的数据和您自己的应用程序上testing它们。

强调我的

我已经稍微修改了Jaymon的答案,对于那些想要真正简单validation的人来说,

anystring@anystring.anystring

正则expression式:

 /\S+@\S+\.\S+/ 

JavaScript函数示例:

 function validateEmail(email) { var re = /\S+@\S+\.\S+/; return re.test(email); } 

有一点你必须明白,第二你决定使用正则expression式来validation电子邮件: 这可能不是一个好主意 。 一旦你了解了这一点,那里有许多实现可以让你在一半的地方, 这篇文章很好地总结了他们。

总而言之,绝对肯定用户input的唯一方法就是发送电子邮件,实际上是发送一封电子邮件,看看会发生什么。 除此之外,这只是猜测。

哇,这里有很多复杂的东西。 如果你想要做的只是捕捉最明显的语法错误,我会做这样的事情:

 \S+@\S+ 

它通常会捕捉用户最明显的错误,并确保表单大部分是正确的,这就是JavaScriptvalidation的全部内容。

HTML5本身有电子邮件validation。 如果您的浏览器支持HTML5,那么您可以使用下面的代码。

 <form><input type="email" placeholder="me@example.com"> <input type="submit"> </form> 

jsFiddle链接

从HTML5规范 :

有效的电子邮件地址是与以下ABNF的email生产匹配的string,字符集为Unicode。

 email = 1*( atext / "." ) "@" label *( "." label ) label = let-dig [ [ ldh-str ] let-dig ] ; limited to a length of 63 characters by RFC 1034 section 3.5 atext = < as defined in RFC 5322 section 3.2.3 > let-dig = < as defined in RFC 1034 section 3.5 > ldh-str = < as defined in RFC 1034 section 3.5 > 

这个要求是故意违反 RFC 5322,它定义了一个同时过于严格(在“@”字符之前),过于含糊(在“@”字符之后)和太宽松(允许评论,空白字符和大多数用户不熟悉的引用string)在这里是实际使用的。

以下JavaScript和Perl兼容的正则expression式是上述定义的一个实现。

 /^[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])?)*$/ 

在现代浏览器中,您可以使用纯JavaScript和DOM构build@ Sushil的答案:

 function validateEmail(value) { var input = document.createElement('input'); input.type = 'email'; input.value = value; return typeof input.checkValidity == 'function' ? input.checkValidity() : /\S+@\S+\.\S+/.test(value); } 

我已经在小提琴http://jsfiddle.net/boldewyn/2b6d5/放在一个例子。; 结合function检测和Squirtle的答案中的裸机validation,它将您从正则expression式大屠杀中解放出来,而不会在旧版浏览器中生存。

我发现这是最好的解决scheme:

 /^[^\s@]+@[^\s@]+\.[^\s@]+$/ 

它允许以下格式:

 1. prettyandsimple@example.com
 2. very.common@example.com
 3. disposable.style.email.with+symbol@example.com
 4. other.email-with-dash@example.com
 9.#!$%&'*+-/=?^_`{}|~@example.org
 6.“()[]:,; @ \\\”!#$%&'* +  -  / =?^ _`{}  〜。一“@ example.org
 7.“”@ example.org(引号之间的空格)
 8.üñîçøðé​​@example.com(本地部分的Unicode字符)
 9.üñîçøðé​​@üñîçøðé​​.com(Unicode字符域部分)
 10.Pelé@example.com(拉丁)
 11.希腊文(δοκιμή@παράδειγμα.δοκιμή)
 12.我买@屋企。香港(中文)
 13.甲斐@黒川。日本(日文)
 14.чебурашка@ящик-с-апельсинами.рф(西里尔文)

它显然是多才多艺的,并允许所有重要的国际angular色,而仍然执行基本anything@anything.anything格式。 它将阻止RFC技术上允许的空间,但它们非常罕见,我很乐意这样做。

这是正确的RFC822版本。

 function checkEmail(emailAddress) { var sQtext = '[^\\x0d\\x22\\x5c\\x80-\\xff]'; var sDtext = '[^\\x0d\\x5b-\\x5d\\x80-\\xff]'; var sAtom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+'; var sQuotedPair = '\\x5c[\\x00-\\x7f]'; var sDomainLiteral = '\\x5b(' + sDtext + '|' + sQuotedPair + ')*\\x5d'; var sQuotedString = '\\x22(' + sQtext + '|' + sQuotedPair + ')*\\x22'; var sDomain_ref = sAtom; var sSubDomain = '(' + sDomain_ref + '|' + sDomainLiteral + ')'; var sWord = '(' + sAtom + '|' + sQuotedString + ')'; var sDomain = sSubDomain + '(\\x2e' + sSubDomain + ')*'; var sLocalPart = sWord + '(\\x2e' + sWord + ')*'; var sAddrSpec = sLocalPart + '\\x40' + sDomain; // complete RFC822 email address spec var sValidEmail = '^' + sAddrSpec + '$'; // as whole string var reValidEmail = new RegExp(sValidEmail); return reValidEmail.test(emailAddress); } 

JavaScript可以匹配正则expression式:

 emailAddress.match( / some_regex /); 

以下是电子邮件的RFC22正则expression式:

 ^((?>[a-zA-Z\d!#$%&'*+\-/=?^_`{|}~]+\x20*|"((?=[\x01-\x7f])[^"\\]|\\[\x01-\x7f])* "\x20*)*(?<angle><))?((?!\.)(?>\.?[a-zA-Z\d!#$%&'*+\-/=?^_`{|}~]+)+|"((?=[\x01-\x 7f])[^"\\]|\\[\x01-\x7f])*")@(((?!-)[a-zA-Z\d\-]+(?<!-)\.)+[a-zA-Z]{2,}|\[(((?(?< !\[)\.)(25[0-5]|2[0-4]\d|[01]?\d?\d)){4}|[a-zA-Z\d\-]*[a-zA-Z\d]:((?=[\x01-\x7f]) [^\\\[\]]|\\[\x01-\x7f])+)\])(?(angle)>)$ 

按照RFC来正确validation电子邮件地址是不能用单行正则expression式来实现的。 我在PHP中find的最佳解决scheme是什么是有效的电子邮件地址? 。 显然,它已经被移植到Java。 我认为这个函数太复杂了,无法在JavaScript中移植和使用。

一个好的做法是validation客户端上的数据,但仔细检查服务器上的validation。 考虑到这一点,您可以简单地检查一个string是否看起来像客户端上的有效电子邮件地址,并在服务器上执行严格的检查。

这里是我用来检查一个string看起来像一个有效的邮件地址的JavaScript函数:

 function looksLikeMail(str) { var lastAtPos = str.lastIndexOf('@'); var lastDotPos = str.lastIndexOf('.'); return (lastAtPos < lastDotPos && lastAtPos > 0 && str.indexOf('@@') == -1 && lastDotPos > 2 && (str.length - lastDotPos) > 2); } 

说明:

  • lastAtPos < lastDotPos :Last @应该在最后. 因为@不能是服务器名称的一部分(据我所知)。

  • lastAtPos > 0 :在最后一个@之前应该有一些东西(电子邮件用户名)。

  • str.indexOf('@@') == -1 :地址中不应该有@@ 。 即使@作为电子邮件用户名中的最后一个字符出现,也必须用" @和地址中的最后一个“ @ "作为引号。

  • lastDotPos > 2 :最后一个点之前至less应有三个字符,例如a@b.com

  • (str.length - lastDotPos) > 2 :最后一个点后面应该有足够多的字符形成一个双字符域。 我不确定括号是否有必要。

所有电子邮件地址都包含“at”符号。 testing必要的条件

 email.indexOf("@") > 0 

不要打扰任何更复杂的事情。 即使您可以完全确定一封电子邮件是否符合RFC语法,也不会告诉您是否属于提供该电子邮件的人。 这是真正重要的。

为了testing,发送validation消息。

这是从http://codesnippets.joyent.com/posts/show/1917盗取的;

 email = $('email'); filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; if (filter.test(email.value)) { // Yay! valid return true; } else {return false;} 

我真的很期待解决这个问题。 所以我修改了上面的emailvalidation正则expression式

  • 原版的
    /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/

  • 改性
    /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()\.,;\s@\"]+\.{0,1})+[^<>()\.,;:\s@\"]{2,})$/

通过维基百科电子邮件地址的例子。

你可以在这里看到结果。

在这里输入图像说明

只需检查input的电子邮件地址是否有效使用HTML。

 <input type="email"/> 

没有必要写一个函数进行validation。

你不应该使用正则expression式来validationinputstring来检查它是否是电子邮件。 这太复杂了,不能涵盖所有的情况。

现在因为只能覆盖90%的情况,所以请写下如下内容:

 function isPossiblyValidEmail(txt) { return txt.length > 5 && txt.indexOf('@')>0; } 

你可以改进它。 例如,“aaa @”是有效的。 但总的来说,你得到的主意。 而且不要被带走…一个简单的90%的解决scheme比100%的解决scheme更好。

世界需要更简单的代码…

做这个…

 [a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])? 

为什么? 它基于RFC 2822,这是一个标准的所有电子邮件地址必须坚持。

通常,在数据库中存储电子邮件地址时,我将它们设置为小写,实际上,正则expression式通常可以标记为不区分大小写。 在这种情况下,这个比较短一点

 [a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])? 

下面是一个在JavaScript中使用的例子(最后是不区分大小写的标志)。

 var emailCheck=/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i; console.log( emailCheck.test('some.body@domain.co.uk') ); 

注意:从技术上来说,有些电子邮件可以在引号内的转义字符之前的部分加上引号(所以你的电子邮件用户可能是讨厌的,并且包含像@和“…只要它是用引号引起来的)NOBODY这样做了吗?已经过时了,但它包含在真正的RFC 2822标准中,在这里省略。

更多信息: http : //www.regular-expressions.info/email.html

This is how node-validator do it:

 /^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[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]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/ 

Apparently, that's it:

 /^([\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+\.)*[\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+@((((([a-z0-9]{1}[a-z0-9\-]{0,62}[a-z0-9]{1})|[az])\.)+[az]{2,6})|(\d{1,3}\.){3}\d{1,3}(\:\d{1,5})?)$/i 

Taken from http://fightingforalostcause.net/misc/2006/compare-email-regex.php on Oct 1 '10.

But, of course, that's ignoring internationalization.

In contrast to squirtle , here is a complex solution, but it does a mighty fine job of validating emails properly:

 function isEmail(email) { return /^((([az]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([az]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([az]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([az]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([az]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([az]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([az]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([az]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([az]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([az]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(email); } 

Use like so:

 if (isEmail('youremail@yourdomain.com')){ console.log('This is email is valid'); } 

best regex ever which confirm RFC5322

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])+

It's hard to get an email validator 100% correct. The only really way to get it correct would be to send a test email to the account. That said, there are a few basic checks that can help make sure that you're getting something reasonable.

Some things to improve:

Instead of new RegExp, just try writing the regexp out like this:

 if (reg.test(/@/)) 

Second, check to make sure that a period comes after the @ sign, and make sure that there are characters between the @s and periods.

Here is a very good discussion about using regular expressions to validate email addresses; " Comparing E-mail Address Validating Regular Expressions "

Here is the current top expression, that is JavaScript compatible, for reference purposes:

 /^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[az][az])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i 

My knowledge of regular expressions is not that good. That's why I check the general syntax with a simple regular expression first and check more specific options with other functions afterwards. This may not be not the best technical solution, but this way I'm way more flexible and faster.

The most common errors I've come across are spaces (especially at the beginning and end) and occasionally a double dot.

 function check_email(val){ if(!val.match(/\S+@\S+\.\S+/)){ // Jaymon's / Squirtle's solution // Do something return false; } if( val.indexOf(' ')!=-1 || val.indexOf('..')!=-1){ // Do something return false; } return true; } check_email('check@thiscom'); // Returns false check_email('check@this..com'); // Returns false check_email(' check@this.com'); // Returns false check_email('check@this.com'); // Returns true 

The regular expression provided by Microsoft within ASP.NET MVC is

 /^[\w-]+(\.[\w-]+)*@([a-z0-9-]+(\.[a-z0-9-]+)*?\.[az]{2,6}|(\d{1,3}\.){3}\d{1,3})(:\d{4})?$/ 

Which I post here in case it's flawed – though it's always been perfect for my needs.

A solution that does not check the existence of the TLD is incomplete.

Almost all answers to this questions suggest using Regex to validate emails addresses. I think Regex is only good for a rudimentary validation. It seems that the checking validation of email addresses is actually two separate problems:

1- Validation of email format: Making sure if the email complies with the format and pattern of emails in RFC 5322 and if the TLD actually exists. A list of all valid TLDs can be found here .

For example, although the address example@example.ccc will pass the regex, it is not a valid email, because ccc is not a top-level domain by IANA.

2- Making sure the email actually exists: For doing this, you just need to send the users an email .

Use this code inside your validator function:

 var emailID = document.forms["formName"]["form element id"].value; atpos = emailID.indexOf("@"); dotpos = emailID.lastIndexOf("."); if (atpos < 1 || ( dotpos - atpos < 2 )) { alert("Please enter correct email ID") return false; } 

Else you can use jQuery . Inside rules define:

 eMailId: { required: true, email: true } 
 <form name="validation" onSubmit="return checkbae()"> Please input a valid email address:<br /> <input type="text" size=18 name="emailcheck"> <input type="submit" value="Submit"> </form> <script language="JavaScript1.2"> var testresults function checkemail(){ var str = document.validation.emailcheck.value var filter = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([az]{2,6}(?:\.[az]{2})?)$/i if (filter.test(str)) testresults = true else { alert("Please input a valid email address!") testresults = false } return (testresults) } </script> <script> function checkbae(){ if (document.layers || document.getElementById || document.all) return checkemail() else return true } </script> 

Here is a function I use for front end email validation. (The Regular Expression came from parsley.js)

 <!DOCTYPE html> <html> <head> <title>Our Company</title> <style> .form-style { color: #ccc; } </style> </head> <body> <h1>Email Validation Form Example</h1> <input type="text" name="email" id="emailInput" class="form-style"> <script> function validateEmail(emailAddress) { var regularExpression = /^((([az]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([az]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([az]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([az]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([az]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([az]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([az]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([az]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([az]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([az]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))){2,6}$/i; return regularExpression.test(emailAddress); } function showEmailValidationState(event) { if (validateEmail(event.target.value)) { document.getElementById("emailInput").style.color = 'black'; } } document.getElementById("emailInput").addEventListener("keyup", showEmailValidationState); </script> </body> </html> 

The best practice is to either use HTML5 built-in email tag.

 <input type="email" name="email"> 

or the common email syntax as recognizing @ and . from the string is given below.

 ^[a-zA-Z0-9_\-.]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-.]+$ 

Note that this would still produce invalid email that will still match the regex, its almost impossible to catch them all but this will improve the situation a little.