javascriptwebunbounce

Custom validation for phone number in JS


I am trying to add phone validation on form submit. Main goal is: if phone starts not on "39" or "+39" add this numbers before the number and submit. Code is added via script manager just after body tag. But it doesn't work on submit. And I don't have any errors in browser console.

<form action="some.php" method="POST">
  <div class="fields">
    <div class="lp-pom-form-field single-line-text" id="container_nome">
      <label class="main lp-form-label" for="nome" id="label_nome" style="height: auto;">
        <span class="label-style">Nome e Cognome&nbsp;*</span>
      </label>
      <input type="text" id="nome" name="nome" placeholder="" class="ub-input-item single text form_elem_nome">
    </div>
    <div class="lp-pom-form-field single-line-text" id="container_telefono">
      <label class="main lp-form-label" for="telefono" id="label_telefono" style="height: auto;">
        <span class="label-style">Telefono&nbsp;*</span>
      </label>
      <input type="text" id="telefono" name="telefono" placeholder="" class="ub-input-item single text form_elem_telefono">
    </div>
  </div>
</form>

 window.onload = function() {
      var mainForm = document.forms[0];
      mainForm.addEventListener("submit", function validPhone() {
        var re = /^\+?\d{1,3}?[- .]?\(?(?:\d{2,3})\)?[- .]?\d\d\d[- .]?\d\d\d\d$/;
        var myPhone = '';
        var element = document.getElementById('telefono');
        if (element != null) {
          myPhone = element.value;
        }
        else {
          myPhone = null;
        }
        var myPhoneTrim = myPhone.trim().replace(/\s|\-|\(|\)/g, "");
        var valid = re.test(myPhoneTrim);

        if (myPhoneTrim.startsWith("39")) {
          myPhoneTrim = "+" + myPhoneTrim;
        } else if (!myPhoneTrim.startsWith("39") && !myPhoneTrim.startsWith("+39")) {
          myPhoneTrim = "+39" + myPhoneTrim;
        }
        return valid;
      });
    }

Solution

  • Not sure what your HTML looks like or how you apply the JS script, but running this in JSFiddle seems fine: https://jsfiddle.net/7u2h3nqn/17/

    JS:

    var mainForm = document.getElementById("lp-pom-button-205");
    
    mainForm.addEventListener("click", function validPhone() {
    
            var re = /^\+?\d{1,3}?[- .]?\(?(?:\d{2,3})\)?[- .]?\d\d\d[- .]?\d\d\d\d$/;
            var myPhone = '';
            var element = document.getElementById('telefono');
    
            if (element != null) {
              myPhone = element.value;
            }
            else {
              myPhone = null;
            }
            var myPhoneTrim = myPhone.trim().replace(/\s|\-|\(|\)/g, "");
            var valid = re.test(myPhoneTrim);
    
            if (myPhoneTrim.startsWith("39")) {
              myPhoneTrim = "+" + myPhoneTrim;
            } else if (!myPhoneTrim.startsWith("39") && !myPhoneTrim.startsWith("+39")) {
              myPhoneTrim = "+39" + myPhoneTrim;
            }
    
            console.log(myPhoneTrim);
    
            return valid;
    })