Попытка использовать момент.js для проверки даты. Сообщение об ошибке не будет отображаться - PullRequest
0 голосов
/ 17 марта 2019

Я пытаюсь сделать простую регистрационную форму в Javascript, и я пытаюсь использовать moment.js для проверки даты. Пока все мои проверки имени пользователя и проверки пароля работают, однако я не могу заставить свою проверку даты работать. Я видел другие темы здесь, спрашивающие о проверке даты, и большинство людей предложили использовать для этого moment.js. Вот где я застрял. Я просто пытаюсь получить форму для проверки, если дата в действительном формате MM-DD-YYYY. Любая помощь будет оценена.

Мне также кажется, что я получил предупреждение об Уничтожении, и я не уверен, что с этим делать.

function validateform() {
  var username = document.getElementById('username');
  var password = document.getElementById('password');
  var firstname = document.getElementById('firstname');
  var lastname = document.getElementById('lastname');
  var dob = document.getElementById('dob');
  var email = document.getElementById('email');
  var phone = document.getElementById('phone');

  if(username.value.length < 8){
    alert("Username must be at least 8 characters");
    form.username.focus();
    return false;
  }
  if (password.value.length < 8) {
    alert("Password must be at least 8 characters");
    form.password.focus();
    return false;
  }
}

function vailddatecheck(dateString) {
  var dateforvailidation = dateString.value;
  var isVaild = moment(dateforvailidation, 'MM-DD-YYYY' , true).isVaild();
  if (isVaild) {
    return true;
    }
    else {
      alert("Date must be in MM-DD-YYYY format");
      form.dob.focus();
      return false;
    }
}
<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Totally Legit Registration Page</title>
    <link href="Mod4style.css" rel="stylesheet">
  </head>
  <body>
    <form class="submit.html" method="post" class="simpleForm" onsubmit="return validateform()">
      <input type="text" id="username" placeholder="User Name">
      <p class="error"></p>
      <input type="password" id="password" placeholder="Password">
      <p class="error"></p>
      <input type="firstname" id="firstname" placeholder="First Name">
      <p class="error"></p>
      <input type="lastname" id="lastname" placeholder="Last Name">
      <p class="error"></p>
      <input type="dob" id="dob" placeholder="Date of Birth"  onchange="vailddatecheck(this)">
      <p class="error"></p>
      <input type="email" id="email" placeholder="Email">
      <p class="error"></p>
      <input type="phone" id="phone" placeholder="Phone Number">
      <p class="error"></p>
      <button type="Submit">Submit</button>
      <button type="Reset">Reset</button>
    </form>
    <script <script src="formvalidation.js" charset="utf-8"></script>
  </body>
  <script src="https://cdn.jsdelivr.net/npm/moment@2.24.0/moment.min.js"></script>
    <script>
      moment("dateforvailidation").format();
  </script>
</html>

Ответы [ 2 ]

0 голосов
/ 17 марта 2019

Как упомянуто в комментарии @putvande, вам нужно вызывать isValid, а не isVaild.

Не уверен, почему вы хотите вызвать функцию проверки при вводе изменения даты, вы можете вызывать ее как другие проверки при отправке в форме validate.функция.или вы можете заключить этот код в функцию vailddatecheck и вызвать его в validateform.

let isVaild = moment(dob.value, 'MM-DD-YYYY' , true).isValid()
  if (!isVaild) 
  {
    alert("Date must be in MM-DD-YYYY format");
      form.dob.focus();
      return false;
   } 
0 голосов
/ 17 марта 2019

За моментальная документация :

Парсер момента очень прощающий, и это может привести к нежелательному / неожиданному поведению.

Например, следующее поведениеможно наблюдать:

moment('2016 is a date', 'YYYY-MM-DD').isValid() //true, 2016 was matched

Вы можете попробовать HTML-ввод date type , однако он всегда будет отображать дату в локали браузера и будет работать только в браузерах, которые его поддерживают .

...