TransWikia.com

Как валидировать ФИО, Телефон, Email в одном формате?

Stack Overflow на русском Asked by Ashh on November 15, 2021

Основной код(html,js):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Validation Form</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div>
        <h3> Заполните форму</h3>
        <form id="form" action="#">
            <div class="inputBox">
              <input type="text" name="" id="email"
              placeholder="[email protected]" required
              onkeydown="validationEmail()">  
              <span id="text"></span>
              <input type="tel" id="tel" placeholder="+79951122131" required
              onkeydown="validationTel()">
              <span id="text1"></span>
              <input type="text" id="name" placeholder="Иванов Александр Александрович" required> 
              <input type="submit" id="submit" value="Отправить" />
            </div>
        </form>
    </div>
    <script type="text/javascript">
        function validationEmail()
        {
            var form = document.getElementById("form");
            var email = document.getElementById("email").value;
            var text = document.getElementById("text");
            var pattern = /^[^ ]+@[^ ]+.[a-z]{2,3}$/;

            if (email.match(pattern))
            {
                form.classList.add("valid");
                form.classList.remove("invalid");
                text.innerHTML = "Ваша почта подходит.";
                text.style.color = "#00ff00";
            }
            else
            {
                form.classList.remove("valid");
                form.classList.add("invalid");
                text.innerHTML = "Пожалуйста введите правильную почту";
                text.style.color = "#ff0000";
            }

            if (email == "")
            {
                form.classList.remove("valid");
                form.classList.remove("invalid");
                text.innerHTML = "";
                text.style.color = "#00ff00";
            }
        }
        function validationTel()
        {
            var form = document.getElementById("form");
            var tel = document.getElementById("tel").value;
            var text = document.getElementById("text");
            var pattern = "(?d{3})?[-.]? *d{3}[-.]? *[-.]?d{4}";

            if (tel.match(pattern))
            {
                form.classList.add("valid");
                form.classList.remove("invalid");
                text.innerHTML = "Ваша почта подходит.";
                text.style.color = "#00ff00";
            }
            else
            {
                form.classList.remove("valid");
                form.classList.add("invalid");
                text.innerHTML = "Пожалуйста введите правильную почту";
                text.style.color = "#ff0000";
            }

            if (tel == "")
            {
                form.classList.remove("valid");
                form.classList.remove("invalid");
                text.innerHTML = "";
                text.style.color = "#00ff00";
            }
        }
    </script>
</body>
</html>

css:

@import url('https://fonts.googleapis.com/css2?family=Poppins&display=swap');
*
{
   margin: 0;
   padding: 0;
   font-family: 'Poppins', sans-serif; 
}
body
{
    display: flex;
    justify-content: center;
    align-items: center;
    min-height: 100vh;
    background: #373737;
}
h3
{
    position: relative;
    font-size: 20px;
    color: #f9f9f9;
    letter-spacing: 500;
    margin-bottom: 5px;
}
#form
{
    position: relative;
}
#form #email, #tel, #name
{
    width: 300px;
    background: #292929;
    outline: none;
    border: none;
    padding: 10px;
    border-radius: 6px;
    color: #fff;
    font-style: 18px;
}
#submit
{
    position: relative;
    left:-50%;
    top:50px;
    background: #292929;
    border: none;
    color: white;
    padding: 10px 22px;
    text-decoration: none;
    margin: 4px 2px;
    cursor: pointer;
    border-radius: 6px;
}
#form #inputBox
{
    position: relative;
}
#text
{
    display: block;
    color: #000;
    font-weight: 300;
    font-style: italic;
    padding: 5px;
}
#text1
{
    display: block;
    color: #000;
    font-weight: 300;
    font-style: italic;
    padding: 3px;
}
#form.invalid .inputBox:before
{
    content: '';
    position: absolute;
    right: 125px;
    top: 9px;
    width: 24px;
    height: 24px;
    background: url(invalid.png);
    background-size: cover;
    z-index: 1000;
}
#form.valid .inputBox:before
{
    content: '';
    position: absolute;
    right: 125px;
    top: 9px;
    width: 24px;
    height: 24px;
    background: url(valid.png);
    background-size: cover;
    z-index: 1000;
}

Я пользуюсь чужим кодом, чтобы разобраться как это правильно делать и у меня не получается перенести логику из validationEmail в validationTel и в дальнейшем validationName итд. Я хочу грамотно писать такой код, так что я бы очень был благодарен любому совету и комментарию, спасибо за ваше время!

Весь код сейчас захостен на https://validation-testing.firebaseapp.com/ для визуализации.

One Answer

В принципе, у вас все правильно, просто неоптимально, и регулярка для телефона вызывает ошибку. Я бы для начала вынес повторяющиеся вещи в одно место. Будет гораздо короче и понятнее. А потом тщательно проверил регулярные выражения (в моем примере они каличные, чисто шоб было).

function validateInput(input_id, output_id, pattern_text, valid_message, invalid_message) {
  var form = document.getElementById("form");
  var data = document.getElementById(input_id).value;
  var result = document.getElementById(output_id);
  if (data.match(pattern_text)) {
    form.classList.add("valid");
    form.classList.remove("invalid");
    result.innerHTML = valid_message;
    result.style.color = "#00ff00";
  } else {
    form.classList.remove("valid");
    form.classList.add("invalid");
    result.innerHTML = invalid_message;
    result.style.color = "#ff0000";
  }
  if (data == "") {
    form.classList.remove("valid");
    form.classList.remove("invalid");
    result.innerHTML = "";
    result.style.color = "#00ff00";
  }

}

function validationEmail() {
  var pattern = "[a-zZ-Z0-9.]*@[a-zZ-Z0-9.]*.[a-zZ-Z0-9.]{2,3}";
  validateInput("email", "text", pattern, "Ваша почта подходит.", "Пожалуйста введите правильную почту");
}

function validationTel() {
  var pattern = "\+[0-9]{11}";
  validateInput("tel", "text1", pattern, "Телефон подходит.", "Пожалуйста введите правильный телефон.");
}

function validationName() {
  var pattern = "[a-zA-Z]*";
  validateInput("name", "text2", pattern, "Имя подходит.", "Пожалуйста введите правильное имя");
}
span {
  display: block;
}
<div>
  <h3> Заполните форму</h3>
  <form id="form" action="#">
    <div class="inputBox">
      <input type="text" name="" id="email" placeholder="[email protected]" required onkeydown="validationEmail()">
      <span id="text"></span>
      <br>
      <input type="tel" id="tel" placeholder="+79951122131" required onkeydown="validationTel()">
      <span id="text1"></span>
      <br>
      <input type="text" id="name" placeholder="Иванов Александр Александрович" required onkeydown="validationName()">
      <span id="text2"></span>
      <br>
      <input type="submit" id="submit" value="Отправить" />
    </div>
  </form>
</div>

Answered by Инквизитор on November 15, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP