如何在 Jquery 中验证电子邮件?

Posted

技术标签:

【中文标题】如何在 Jquery 中验证电子邮件?【英文标题】:How to validate email in Jquery? 【发布时间】:2011-04-09 12:04:05 【问题描述】:

我编写了以下联系表单验证脚本。如何验证电子邮件字段?

<style type="text/css">
    div.contactForm  width:370px; margin:0 auto; 
    form.contactUs label  display:block; 
    form.contactUs input  margin-bottom:10px; 
    input.submit  margin-top:10px; 
    input.error  background:#FF9B9B; border:1px solid red; 
    div.errorMessage  color:#f00; padding:0 0 20px; 
</style>

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>

<script type="text/javascript">
    $(document).ready(function() 
        $('.errorMessage').hide();
        $('.submit').click(function() 

            var name = $('input.name').val();
            var email = $('input.email').val();
            var phone = $('input.phone').val();

            if (name == '') 
                $('input.name').addClass('error');
                $('input.name').keypress(function()
                    $('input.name').removeClass('error');
                );
            
            if (email == '') 
                $('input.email').addClass('error');
                $('input.email').keypress(function()
                    $('input.email').removeClass('error');
                );
            
            if (phone == '') 
                $('input.phone').addClass('error');
                $('input.phone').keypress(function()
                    $('input.phone').removeClass('error');
                );
            
            if (name == '' || email == '' || phone == '') 
                $('.errorMessage').fadeIn('medium');
                return false;
            

        );
    );
</script>

<div class="contactForm">

<h2>Contact Us</h2>

<div class="errorMessage">Please enter all required fields.</div>

<form action="http://google.com" method="post" class="contactUs">

    <label>Name <em>(required)</em></label>
    <input type="text" name="name" class="name" size="30" />

    <label>Email <em>(valid email required)</em></label>
    <input type="text" name="email" class="email" size="30" />

    <label>Phone <em>(required)</em></label>
    <input type="text" name="phone" class="phone" size="30" />

    <label>Message</label>
    <textarea name="message" cols="40" rows="10"></textarea>

    <br />
    <input type="submit" name="submit" value="Submit" class="submit" />

</form>

</div><!--contactForm-->

编辑

通过验证,我的意思是输入的值必须在适当的位置包含“@”和“.”。

我也不想使用任何额外的插件。

【问题讨论】:

首先,您如何定义电子邮件验证? 【参考方案1】:

如果您不想使用任何插件,可以使用 RegEx。

var testEmail = /^[A-Z0-9._%+-]+@([A-Z0-9-]+\.)+[A-Z]2,4$/i;
if (testEmail.test(valueToTest))
    // Do whatever if it passes.
else
    // Do whatever if it fails.

这将为您提供最多的电子邮件。关于validating emails with RegEx.的有趣读物

您可以在这里测试脚本:http://jsfiddle.net/EFfCa/

【讨论】:

不,它没有。它使完全有效的工作电子邮件无效。请不要使用这个。 查看链接 Randal,你必须决定在什么时候调用有效,否则你会得到一个巨大的 RegEx 语句。正如发帖人所说,他不想使用插件。 必须为新的域区域升级,例如 .university 或 .engineer 域长度应更改,因为最大长度 4 不再有效。使用这个:2, 而不是 2,4 jsfillde:jsfiddle.net/ch3rf1vq【参考方案2】:

如果您真的不想使用插件,我发现这种方法非常好:

function validateEmail(email) 
    var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]2,4)?$/;
    if( !emailReg.test( email ) ) 
        return false;
     else 
        return true;
    

JSFIDDLE

http://thejimgaudet.com/articles/support/web/jquery-e-mail-validation-without-a-plugin/

【讨论】:

这允许空白字段被验证为正确!【参考方案3】:

我目前正在使用ketchup 进行表单验证。还有bassassist's plugin。检查一个插件,它将为您节省数小时的正则表达式编写代码。

【讨论】:

【参考方案4】:

将您的 input.email 块更改为:

            if (email == '') 
            $('input.email').addClass('error');
            $('input.email').keypress(function()
                $('input.email').removeClass('error');
            );
            $('input.email').focusout(function()
                $('input.email').filter(function()
                    return this.value.match(/your email regex/);
                ).addClass('error');
            );
        

说明: 向input.email 表单元素添加焦点操作,使用 RFC822 标准验证电子邮件字符串。如果不能通过则添加'error'类。

我没有在我的浏览器上测试过这个,但它应该适用于 jQuery > 1.4。

编辑:我已经删除了正则表达式,把你最喜欢的放在那里。

【讨论】:

请不要使用这个正则表达式。它使完全有效的、正在使用的电子邮件无效。【参考方案5】:

以下代码对我有用。

<input type="text" id="Email" />

$('#Email').change(function () 
        var status = false;
        var email = $('#Email').val();
        var emailLength = email.length;
        if (email != "" && emailLength > 4) 
            email = email.replace(/\s/g, "");  //To remove space if available
            var dotIndex = email.indexOf(".");
            var atIndex = email.indexOf("@");

            if (dotIndex > -1 && atIndex > -1)    //To check (.) and (@) present in the string
                if (dotIndex != 0 && dotIndex != emailLength && atIndex != 0 && atIndex != emailLength && email.slice(email.length - 1) != ".")    //To check (.) and (@) are not the firat or last character of string
                    var dotCount = email.split('.').length
                    var atCount = email.split('@').length

                    if (atCount == 2 && (dotIndex - atIndex > 1))  //To check (@) present multiple times or not in the string. And (.) and (@) not located subsequently
                        status = true;
                        if (dotCount > 2)     //To check (.) are not located subsequently
                            for (i = 2; i <= dotCount - 1; i++) 
                                if (email.split('.')[i-1].length == 0) 
                                    status = false;
                                
                            
                        
                    
                
            

        

        $('#Email').val(email);
        if (!status) 
            alert("Wrong Email Format");
        
    );

【讨论】:

以上是关于如何在 Jquery 中验证电子邮件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JQuery 对话框中进行验证? [关闭]

使用jQuery进行电子邮件验证

jQuery 验证插件:如何创建自己的消息

验证 jquery 问题

从 jQuery 中的现有电子邮件和密码数组中验证电子邮件和密码

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