使用jQuery进行电子邮件验证

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用jQuery进行电子邮件验证相关的知识,希望对你有一定的参考价值。

我是jQuery的新手,想知道如何使用它来验证电子邮件地址。

答案

您可以使用常规的旧javascript

function isEmail(email) {
  var regex = /^([a-zA-Z0-9_.+-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;
  return regex.test(email);
}
另一答案

一个非常简单的解决方案是使用html5验证:

<form>
  <input type="email" required pattern="[^@]+@[^@]+.[a-zA-Z]{2,6}">

  <input type="submit">
</form>

http://jsfiddle.net/du676/56/

另一答案

如果您有基本表单,只需输入电子邮件类型:<input type="email" required>

这适用于使用HTML5属性的浏览器,然后您甚至不需要JS。即使使用上面的一些脚本,使用电子邮件验证也不会做太多事情:

some@email.com so@恶魔.com有@法克麦罗.net

等...将全部验证为“真实”电子邮件。因此,最好确保用户必须输入两次电子邮件地址,以确保他们将相同的电子邮件地址放入其中。但是为了保证电子邮件地址是真实的,这将是非常困难的,但很有趣,看看是否有办法。但如果你只是确保它是一封电子邮件,请坚持使用HTML5输入。

FIDDLE EXAMPLE

这适用于FireFox和Chrome。它可能无法在Internet Explorer中工作......但是Internet Explorer很糟糕。那么那就是......

另一答案
function isValidEmail(emailText) {
    var pattern = new RegExp(/^((([a-z]|d|[!#$%&'*+-/=?^_`{|}~]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])+(.([a-z]|d|[!#$%&'*+-/=?^_`{|}~]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])+)*)|((x22)((((x20|x09)*(x0dx0a))?(x20|x09)+)?(([x01-x08x0bx0cx0e-x1fx7f]|x21|[x23-x5b]|[x5d-x7e]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(\([x01-x09x0bx0cx0d-x7f]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF]))))*(((x20|x09)*(x0dx0a))?(x20|x09)+)?(x22)))@((([a-z]|d|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(([a-z]|d|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])([a-z]|d|-|.|_|~|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])*([a-z]|d|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF]))).)+(([a-z]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])|(([a-z]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])([a-z]|d|-|.|_|~|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF])*([a-z]|[u00A0-uD7FFuF900-uFDCFuFDF0-uFFEF]))).?$/i);
    return pattern.test(emailText);
};

使用像这样:

if( !isValidEmail(myEmail) ) { /* do things if myEmail is valid. */ }
另一答案
function validateEmail(emailaddress){  
   var emailReg = /^([w-.]+@([w-]+.)+[w-]{2,4})?$/;  
   if(!emailReg.test(emailaddress)) {  
        alert("Please enter valid email id");
   }       
}
另一答案

Javascript Email Validation in MVC/ASP.NET

我在使用Fabian的答案时遇到的问题是在MVC视图中实现它,因为Razor @符号。你必须包括一个额外的@符号来逃避它,如:@@

在MVC中避免使用Razor

function isEmail(email) {
  var regex = /^([a-zA-Z0-9_.+-])+@@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;
  return regex.test(email);
}

我没有在本页的其他地方看到它,所以我认为它可能会有所帮助。

EDIT

这是来自微软的link描述它的用法。 我刚刚测试了上面的代码,得到了以下js:

function validateEmail(email) {
  var regex = /^([a-zA-Z0-9_.+-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/; 
  return regex.test(email);
}

这正是它应该做的事情。

另一答案
<script type = "text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type = "text/javascript">
    function ValidateEmail(email) {
        var expr = /^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$/;
        return expr.test(email);
    };
    $("#btnValidate").live("click", function () {
        if (!ValidateEmail($("#txtEmail").val())) {
            alert("Invalid email address.");
        }
        else {
            alert("Valid email address.");
        }
    });
</script>
<input type = "text" id = "txtEmail" />
<input type = "button" id = "btnValidate" value = "Validate" />
另一答案

登陆这里......最终来到这里:https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address

......提供了以下正则表达式:

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

...我发现这要归功于jQuery Validation插件自述文件中的注释:https://github.com/jzaefferer/jquery-validation/blob/master/README.md#reporting-an-issue

所以,@Fabiananswer的更新版本将是:

function IsEmail(email) {
  var regex = /^[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])?)*$/;
  return regex.test(email);
}

希望有所帮助

另一答案

用这个

if ($this.hasClass('tb-email')) {
    var email = $this.val();
    var txt = /^([a-zA-Z0-9_.-+])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;
    if (!txt.test(email)) {
        e.preventDefault();
        $this.addClass('error');
    } else {
        $this.removeClass('error');
    }
}
另一答案

对于那些想要使用比破坏性光年长RegEx匹配更好的可维护解决方案的人,我写了几行代码。那些想节省字节的人,坚持使用RegEx变种:)

这限制了:

  • 字符串中没有@
  • 字符串中没有点
  • @之后超过2个点
  • 用户名中的坏字符(在@之前)
  • 字符串中超过2 @
  • 域中的坏字符
  • 子域中的坏字符
  • TLD中的坏字符
  • TLD - 地址

无论如何,它仍然可能泄漏,因此请务必将其与服务器端验证+电子邮件链接验证相结合。

这是JSFiddle

 //validate email

var emailInput = $("#email").val(),
    emailParts = emailInput.split('@'),
    text = 'Enter a valid e-mail address!';

//at least one @, catches error
if (emailParts[1] == null || emailParts[1] == "" || emailParts[1] == undefined) { 

    yourErrorFunc(text);

} else {

    //split domain, subdomain and tld if existent
    var emailDomainParts = emailParts[1].split('.');

    //at least one . (dot), catches error
    if (emailDomainParts[1] == null || emailDomainParts[1] == "" || emailDomainParts[1] == undefined) { 

        yourErrorFunc(text); 

     } else {

        //more than 2 . (dots) in emailParts[1]
        if (!emailDomainParts[3] == null || !emailDomainParts[3] == "" || !emailDomainParts[3] == undefined) { 

            yourErrorFunc(text); 

        } else {

            //email user
            if (/[^a-z0-9!#$%&'*+-/=?^_`{|}~]/i.test(emailParts[0])) {

               yourErrorFunc(text);

            } else {

                //double @
                if (!emailParts[2] == null || !emailParts[2] == "" || !emailParts[2] == undefined) { 

                        yourErrorFunc(text); 

                } else {

                     //domain
                     if (/[^a-z0-9-]/i.test(emailDomainParts[0])) {

                         yourErrorFunc(text); 

                     } else {

                         //check for subdomain
                         if (emailDomainParts[2] == null || emailDomainParts[2] == "" || emailDomainParts[2] == undefined) { 

                             //TLD
                             if (/[^a-z]/i.test(emailDomainParts[1])) {

                                 yourErrorFunc(text);

                              } else {

                                 yourPassedFunc()

以上是关于使用jQuery进行电子邮件验证的主要内容,如果未能解决你的问题,请参考以下文章

使用 JQuery、Ajax、PHP、Json 进行表单验证

jQuery 电子邮件验证要求

在rails 6中使用jquery进行用户名和电子邮件实时验证

模态需要在验证后进行验证,它应该移动到另一个模态

使用 jquery 验证电子邮件地址 [重复]

验证电子邮件地址时出现 jQuery 错误