Prosty skrypt walidacji formularza jQuery [zamknięty]

110

Zrobiłem prosty formularz walidacyjny przy użyciu jQuery. Działa dobrze. Rzecz w tym, że nie jestem zadowolony z mojego kodu. Czy istnieje inny sposób na napisanie kodu z takim samym wynikiem wyjściowym?

$(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>');
        }       
}   

});
jhedm
źródło
3
tak, możesz użyć skryptu walidacji jquery, aby uczynić go lepszym.
Devang Rathod,
możesz mi pokazać jak? Mówią, że pisanie kodu jest jak pisanie wiersza. Chcę zoptymalizować mój kod.
jhedm
10
codereview.stackexchange.com - tego właśnie szukasz
Alexander
1
Możesz skorzystać z walidacji formularza HTML5:$('form')[0].checkValidity()
niutech
jeśli głównym celem jest prostota, wtyczka valijate jquery jest obiecująca. jest to wtyczka startowa. ale używa interesującego sposobu walidacji. tutaj jest link do przewodnika. valijate.com/Docs.php
bula

Odpowiedzi:

300

Możesz po prostu użyć wtyczki jQuery Validate w następujący sposób.

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>

DEMO: http://jsfiddle.net/xs5vrrso/

Opcje: http://jqueryvalidation.org/validate

Metody: http://jqueryvalidation.org/category/plugin/

Reguły standardowe : http://jqueryvalidation.org/category/methods/

Reguły opcjonalne dostępne w additional-methods.jspliku :

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
iskrzący
źródło
19

możesz użyć do tego walidatora jquery, ale musisz dodać do tego pliki jquery.validate.js i jquery.form.js. po dołączeniu pliku walidatora zdefiniuj swoją walidację mniej więcej w ten sposób.

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

Możesz zobaczyć to required : true samo, istnieje wiele innych właściwości, takich jak e-mail, który możesz zdefiniować email : true dla numeru number : true

Devang Rathod
źródło
3
Walidator jQuery jest dobry, ale myślę, że jeszcze lepszy jest walidator, który bierze pod uwagę nowe funkcje walidacji HTML5, np . ericleads.com/h5validate .
Matt Browne,
@MattB., Nigdy o tym nie słyszałem, ale wtyczka jQuery Validate bierze również pod uwagę funkcje HTML5 , chociaż nie jestem pewien, dlaczego potrzebujesz / chcesz używać obu razem.
Sparky,
1
Devang, niejquery.form.js jest wymagane użycie pokazanego kodu.
Sparky,
@Sparky O ile nie masz już zaprojektowanej szczególnej estetyki, którą naprawdę lubisz dla komunikatów walidacyjnych, zezwolenie przeglądarce obsługującej HTML5 na wyświetlanie komunikatów walidacyjnych w domyślny sposób jest często przyjemniejsze, gdzie wtyczka walidacyjna jest używana tylko jako zastępcza do wyświetlania komunikatów o błędach w starszych przeglądarkach i dla logiki walidacji HTML5 nie obsługuje (bez dodatkowego JavaScript). Ale to jest tak samo jak moje osobiste preferencje.
Matt Browne,
1
@MattB. Zazwyczaj osoby używające jQuery szukają spójności między przeglądarkami, którą można uzyskać, odchodząc od funkcji przeglądarki, które różnią się znacznie w zależności od marki. Wolę też trzymać się popularnych wtyczek, które mają ogromną bazę wsparcia, a jeśli programista jest również częścią zespołu jQuery , tym lepiej, IMO.
Sparky,