pari
pari

Reputation: 89

Javascript: validating form fields by regular expression and using if/else statement

In my program I have created form and fields in form. I am trying to validate fields. For that I have used regular expression though my regular expression is correct but regular expression for phone doesn't execute. Can anyone tell me wether I defined if/else statement for validation correctly ?

code:

function validateForm() {
  var zip = document.myform.zip;
  var email = document.myform.email;
  var phone = document.myform.phone;
  if (email.value == "") {
    window.alert("Please enter email Address.");
    state.focus();
    return false;
  }

  var regEx2 = /^[0-9]{5}(?:-[0-9]{4})?$/;

  if (zip.value.match(regEx2)) {
    return true;
  } else {
    window.alert("Please provide a zip in the ##### or #####-#### format.");
    zip.focus();
    return false;
  }

  var regEx = /^(?:\(\d{3}\)\s|\d{3}-)\d{3}-\d{4}$/;

  if (phone.value.match(regEx)) {
    return true;
  } else {
    window.alert("Please enter Telephone number in (xxx) xxx-xxxx format.");
    phone.focus();
    return false;
  }


}
<form name="myform" id="myform" action="" onsubmit="return validateForm()" method="post">
  <table cellspacing="2" cellpadding="2" border="0">
    <tr>
      <td align="right">Zip</td>
      <td><input type="text" name="zip" maxlength="15" size="28" /></td>
    </tr>
    <tr>
      <td align="right">Telephone number</td>
      <td><input type="text" name="phone" size="28" placeholder="(555) 555-5555" /></td>
    </tr>
    <tr>
      <td align="right"> EMail </td>
      <td> <input type="text" name="email" size="28" /></td>
    </tr>
    <tr>
      <td align="right"></td>
      <td><input type="submit" value="Submit" /> </td>
    </tr>
  </table>

Upvotes: 0

Views: 428

Answers (1)

shakhawat
shakhawat

Reputation: 2725

The problem is here -

 if (zip.value.match(regEx2)) {
    return true;
  } else {
    window.alert("Please provide a zip in the ##### or #####-#### format.");
    zip.focus();
    return false;
  }

You are returning from this point regardless of valid or invalid zip. Code blocks afterward won't get executed.

I would suggest not to return in every successful if block, because, the code execution will return from that point without validating the other fields.

       function validateForm() {

            var valid = true;
            var zip = document.myform.zip;
            var email = document.myform.email;
            var phone = document.myform.phone; 

            if (email.value == "")
            {
                window.alert("Please enter email Address.");
                email.focus();
                valid = false;
            }   

            var regEx2 = \^[0-9]{5}(?:-[0-9]{4})?$\;

            if(!zip.value.match(regEx2))
            {
                window.alert( "Please provide a zip in the ##### or #####-#### format." );
                zip.focus() ;
                valid = false;
            }  

            var regEx = \^(?:\(\d{3}\)\s|\d{3}-)\d{3}-\d{4}$\;

            if(!phone.value.match(regEx)) 
            {  
                window.alert("Please enter Telephone number in (xxx) xxx-xxxx format.");
                phone.focus();
                valid = false;  
            }  

            return valid;
       } 

if you really want to validate one field only when all the previous fields are valid (as your current code), this is working -

         function validateForm() {

            var zip = document.myform.zip;
            var email = document.myform.email;
            var phone = document.myform.phone; 

            if (email.value == "")
            {
                window.alert("Please enter email Address.");
                email.focus();
                return false;
            }   

            var regEx2 = \^[0-9]{5}(?:-[0-9]{4})?$\;

            if(!zip.value.match(regEx2))
            {
                window.alert( "Please provide a zip in the ##### or #####-#### format." );
                zip.focus() ;
                return false;
            }  

            var regEx = \^(?:\(\d{3}\)\s|\d{3}-)\d{3}-\d{4}$\;

            if(!phone.value.match(regEx)) 
            {  
                window.alert("Please enter Telephone number in (xxx) xxx-xxxx format.");
                phone.focus();
                return false;
            }  

            return true;
         } 

Here is the complete script -

<!DOCTYPE html>
<html>
<head>
    <title>NumerValidation</title>
</head>
<body>
        <form name="myform" id="myform" action="" onsubmit="return validateForm();" method="post">
        <table cellspacing="2" cellpadding="2" border="0">
        <tr>
                <td align="right">Zip</td>
                <td><input type="text" name="zip" maxlength="15" size="28"/></td>
            </tr>
            <tr>
                <td align="right">Telephone number</td>
                <td><input type="text" name="phone" size="28" placeholder="(555) 555-5555"/></td>
            </tr>
            <tr>
                <td align="right"> EMail </td>
                <td> <input type="text" name="email" size="28" /></td>
            </tr>
<tr>
                <td align="right"></td>
                <td><input type="submit" value="Submit"/> </td>
            </tr>
        </table>    
    </form>
<script>

         function validateForm() {

            var zip = document.myform.zip;
            var email = document.myform.email;
            var phone = document.myform.phone; 

            if (email.value == "")
            {
                window.alert("Please enter email Address.");
                email.focus();
                return false;
            }   

            var regEx2 = /^[0-9]{5}(?:-[0-9]{4})?$/;

            if(!zip.value.match(regEx2))
            {
                window.alert( "Please provide a zip in the ##### or #####-#### format." );
                zip.focus() ;
                return false;
            }  

            var regEx = /^(?:\(\d{3}\)\s|\d{3}-)\d{3}-\d{4}$/;

            if(!phone.value.match(regEx)) 
            {  
                window.alert("Please enter Telephone number in (xxx) xxx-xxxx format.");
                phone.focus();
                return false;
            }  

            return true;
         } 

        </script>

</body>
</html>

Upvotes: 2

Related Questions