一个简单的jQuery表单验证脚本


110

我使用jQuery创建了一个简单的验证表单。一切正常。问题是我对我的代码不满意。有没有其他方法可以编写具有相同输出结果的代码?

$(document).ready(function(){

$('.submit').click(function(){
    validateForm();   
});

function validateForm(){

    var nameReg = /^[A-Za-z]+$/;
    var numberReg =  /^[0-9]+$/;
    var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;

    var names = $('#nameInput').val();
    var company = $('#companyInput').val();
    var email = $('#emailInput').val();
    var telephone = $('#telInput').val();
    var message = $('#messageInput').val();

    var inputVal = new Array(names, company, email, telephone, message);

    var inputMessage = new Array("name", "company", "email address", "telephone number", "message");

     $('.error').hide();

        if(inputVal[0] == ""){
            $('#nameLabel').after('<span class="error"> Please enter your ' + inputMessage[0] + '</span>');
        } 
        else if(!nameReg.test(names)){
            $('#nameLabel').after('<span class="error"> Letters only</span>');
        }

        if(inputVal[1] == ""){
            $('#companyLabel').after('<span class="error"> Please enter your ' + inputMessage[1] + '</span>');
        }

        if(inputVal[2] == ""){
            $('#emailLabel').after('<span class="error"> Please enter your ' + inputMessage[2] + '</span>');
        } 
        else if(!emailReg.test(email)){
            $('#emailLabel').after('<span class="error"> Please enter a valid email address</span>');
        }

        if(inputVal[3] == ""){
            $('#telephoneLabel').after('<span class="error"> Please enter your ' + inputMessage[3] + '</span>');
        } 
        else if(!numberReg.test(telephone)){
            $('#telephoneLabel').after('<span class="error"> Numbers only</span>');
        }

        if(inputVal[4] == ""){
            $('#messageLabel').after('<span class="error"> Please enter your ' + inputMessage[4] + '</span>');
        }       
}   

});

3
是的,您可以使用jquery验证脚本来使其变得更好。
Devang Rathod

你能告诉我如何吗?他们说写代码就像写诗一样。我想优化我的代码。
jhedm

10
codereview.stackexchange.com –这就是您所需要的
Alexander

1
您可以使用HTML5表单验证:$('form')[0].checkValidity()
niutech

如果主要重点是简单性,则valijate jquery插件很有希望。它是一个启动插件。但是,它使用了一些有趣的验证方式。这是那里的指南的链接。valijate.com/Docs.php
布拉

Answers:


300

您可以简单地使用jQuery Validate插件,如下所示。

jQuery的

$(document).ready(function () {

    $('#myform').validate({ // initialize the plugin
        rules: {
            field1: {
                required: true,
                email: true
            },
            field2: {
                required: true,
                minlength: 5
            }
        }
    });

});

HTML

<form id="myform">
    <input type="text" name="field1" />
    <input type="text" name="field2" />
    <input type="submit" />
</form>

演示:http : //jsfiddle.net/xs5vrrso/

选项: http //jqueryvalidation.org/validate

方法: http : //jqueryvalidation.org/category/plugin/

标准规则http : //jqueryvalidation.org/category/methods/

additional-methods.js文件提供的可选规则

maxWords
minWords
rangeWords
letterswithbasicpunc
alphanumeric
lettersonly
nowhitespace
ziprange
zipcodeUS
integer
vinUS
dateITA
dateNL
time
time12h
phoneUS
phoneUK
mobileUK
phonesUK
postcodeUK
strippedminlength
email2 (optional TLD)
url2 (optional TLD)
creditcardtypes
ipv4
ipv6
pattern
require_from_group
skip_or_fill_minimum
accept
extension

18

您可以为此使用jquery验证程序,但需要为此添加jquery.validate.js和jquery.form.js文件。包括验证器文件后,定义您的验证,如下所示。

<script type="text/javascript">
$(document).ready(function(){
    $("#formID").validate({
    rules :{
        "data[User][name]" : {
            required : true
        }
    },
    messages :{
        "data[User][name]" : {
            required : 'Enter username'
        }
    }
    });
});
</script>

您会看到required : true 同样的内容,还有更多属性,例如可以email : true 为数字定义的电子邮件 number : true


3
jQuery验证器很好,但是我认为将新的HTML5验证功能考虑在内的验证器更好,例如ericleads.com/h5validate
马特·布朗

@MattB。,从没听说过,但是jQuery Validate插件也考虑到了HTML5功能,尽管我不确定为什么需要/想要同时使用两者。
Sparky

1
Devang,jquery.form.js不需要使用你所示的代码。
Sparky

@Sparky除非您已经为验证消息设计了特别喜欢的外观,否则允许支持HTML5的浏览器以默认方式显示验证消息通常会更好,在这种情况下,验证插件仅用作显示错误消息的备用在较旧的浏览器上,并且对于验证逻辑,HTML5不支持(没有额外的Javascript)。但是,这和我的个人喜好一样多。
马特·布朗

1
@MattB。通常,使用jQuery的人们正在通过摆脱浏览器功能(跨品牌差异很大)而获得跨浏览器的一致性。我还更喜欢使用具有广泛支持基础的流行插件,如果开发人员也是jQuery Team的成员,那么更好,IMO。
Sparky
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.