【问题标题】:JavaScript form validation- DateJavaScript 表单验证 - 日期
【发布时间】:2018-09-02 15:02:24
【问题描述】:

我的学校给了我一周的时间来学习 JavaScript。我们从表单验证开始。

我能够成功找出姓名和电子邮件地址,但无法添加所需的日期验证。

到目前为止我的代码:

function formValidator() {
  // Make quick references to our fields
  var name = document.getElementById('name');
  var email = document.getElementById('email');

  // Check each input in the order that it appears in the form!
  if (isAlphabet(name, "Please enter only letters for your name")) {
    if (emailValidator(email, "Please enter a valid email address")) {
      return true;
    }
  }
  return false;
}

function notEmpty(elem, helperMsg) {
  if (elem.value.length == 0) {
    alert(helperMsg);
    elem.focus(); // set the focus to this input
    return false;
  }
  return true;
}

function isNumeric(elem, helperMsg) {
  var numericExpression = /^[0-9]+$/;
  if (elem.value.match(numericExpression)) {
    return true;
  } else {
    alert(helperMsg);
    elem.focus();
    return false;
  }
}

function isAlphabet(elem, helperMsg) {
  var alphaExp = /^[a-zA-Z]+$/;
  if (elem.value.match(alphaExp)) {
    return true;
  } else {
    alert(helperMsg);
    elem.focus();
    return false;
  }
}

function isAlphanumeric(elem, helperMsg) {
  var alphaExp = /^[0-9a-zA-Z]+$/;
  if (elem.value.match(alphaExp)) {
    return true;
  } else {
    alert(helperMsg);
    elem.focus();
    return false;
  }
}

function lengthRestriction(elem, min, max) {
  var uInput = elem.value;
  if (uInput.length >= min && uInput.length <= max) {
    return true;
  } else {
    alert("Please enter between " + min + " and " + max + " characters");
    elem.focus();
    return false;
  }
}

function madeSelection(elem, helperMsg) {
  if (elem.value == "Please Choose") {
    alert(helperMsg);
    elem.focus();
    return false;
  } else {
    return true;
  }
}

function emailValidator(elem, helperMsg) {
  var emailExp = /^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/;
  if (elem.value.match(emailExp)) {
    return true;
  } else {
    alert(helperMsg);
    elem.focus();
    return false;
  }
}

//javascriptkit.com/script/script2/validatedate.shtml


function checkdate(input) {
  var validformat = /^\d{2}\/\d{2}\/\d{4}$/ //Basic check for format validity
  var returnval = false
  if (!validformat.test(input.value))
    alert("Invalid Date Format. Please correct and submit again.")
  else { //Detailed check for valid date ranges
    var monthfield = input.value.split("/")[0]
    var dayfield = input.value.split("/")[1]
    var yearfield = input.value.split("/")[2]
    var dayobj = new Date(yearfield, monthfield - 1, dayfield)
    if ((dayobj.getMonth() + 1 != monthfield) || (dayobj.getDate() != dayfield) || (dayobj.getFullYear() != yearfield))
      alert("Invalid Day, Month, or Year range detected. Please correct and submit again.")
    else
      returnval = true
  }
  if (returnval == false) input.select()
  return returnval
}
<div id="form">
  <h1>Questions? Contact Us!</h1>
  <form onsubmit='return formValidator()'>
    <label for="name">Name:</label>
    <input type='text' id='name' /><br />
    <label for="email">Email:</label>
    <input type='text' id='email' /><br />
    <label for="date">Date: </label>
    <input type="text" id="date" required /> <br>
    <label for="message">Question:</label>
    <textarea name="message" rows="8" cols="20" required>Please make sure your question is at least five words.</textarea> <br>
    <input type='submit' value='Check Form' />
  </form>
</div>

我想我应该更改功能检查日期,但我不确定该怎么做。

谢谢。

【问题讨论】:

  • 也许将类型从文本type="text"更改为日期type="date"开始。
  • 请研究以下对另一个问题的回答,这可能对您有所帮助。 stackoverflow.com/a/6178341/125981
  • 我会将分号添加到您所拥有的函数的行中。即你有一个例子var returnval = false使用var returnval = false;,为每一行做。
  • 您应该解释出了什么问题,例如测试输入值、预期结果和实际结果。 “无法验证日期”不是一个非常明确的问题描述。顺便说一句,以这种方式验证日期时,您只需要测试月份。如果日期超出范围,则月份将更改。如果月份超出范围,它将更改。年份不能超出范围。

标签: javascript forms validation date


【解决方案1】:

在您的函数中连接日期验证。formValidator - 我修改了该函数以使用 isValid 以避免大量嵌套验证。 如果您想一次只使用一个,从 name 开始,您也可以在下一个使用它,将其添加到每个的开头,如果它是错误的,它会跳过:

if (isValid && !emailValidator(email, "Please enter a valid email address"))

注意!emailValidator 上添加的! 表示如果失败则将isValid 设为false。

function formValidator() {
  // Make quick references to our fields
  var name = document.getElementById('name');
  var email = document.getElementById('email');
  var mydate = document.getElementById('date'); // add this one
  var isValid = true; //added this (form level valid true/false)

  // Check each input in the order that it appears in the form!
  if (!isAlphabet(name, "Please enter only letters for your name")) {
    isValid = false;
  }

  if (!emailValidator(email, "Please enter a valid email address")) {
    isValid = false;
  }
  // check the date
  if (!checkdate(mydate)) {
    isValid = false;
    alert("bad date " + mydate.value);
  }
  return isValid;
}

function notEmpty(elem, helperMsg) {
  if (elem.value.length == 0) {
    alert(helperMsg);
    elem.focus(); // set the focus to this input
    return false;
  }
  return true;
}

function isNumeric(elem, helperMsg) {
  var numericExpression = /^[0-9]+$/;
  if (elem.value.match(numericExpression)) {
    return true;
  } else {
    alert(helperMsg);
    elem.focus();
    return false;
  }
}

function isAlphabet(elem, helperMsg) {
  var alphaExp = /^[a-zA-Z]+$/;
  if (elem.value.match(alphaExp)) {
    return true;
  } else {
    alert(helperMsg);
    elem.focus();
    return false;
  }
}

function isAlphanumeric(elem, helperMsg) {
  var alphaExp = /^[0-9a-zA-Z]+$/;
  if (elem.value.match(alphaExp)) {
    return true;
  } else {
    alert(helperMsg);
    elem.focus();
    return false;
  }
}

function lengthRestriction(elem, min, max) {
  var uInput = elem.value;
  if (uInput.length >= min && uInput.length <= max) {
    return true;
  } else {
    alert("Please enter between " + min + " and " + max + " characters");
    elem.focus();
    return false;
  }
}

function madeSelection(elem, helperMsg) {
  if (elem.value == "Please Choose") {
    alert(helperMsg);
    elem.focus();
    return false;
  } else {
    return true;
  }
}

function emailValidator(elem, helperMsg) {
  var emailExp = /^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/;
  if (elem.value.match(emailExp)) {
    return true;
  } else {
    alert(helperMsg);
    elem.focus();
    return false;
  }
}

//javascriptkit.com/script/script2/validatedate.shtml


function checkdate(input) {
  var validformat = /^\d{2}\/\d{2}\/\d{4}$/ //Basic check for format validity
  var returnval = false;
  if (!validformat.test(input.value)) {
    alert("Invalid Date Format. Please correct and submit again.");
  } else { //Detailed check for valid date ranges
    var monthfield = input.value.split("/")[0];
    var dayfield = input.value.split("/")[1];
    var yearfield = input.value.split("/")[2];
    var dayobj = new Date(yearfield, monthfield - 1, dayfield);
    if ((dayobj.getMonth() + 1 != monthfield) || (dayobj.getDate() != dayfield) || (dayobj.getFullYear() != yearfield)) {
      alert("Invalid Day, Month, or Year range detected. Please correct and submit again.");
    } else {
      returnval = true;
    }
  }
  if (returnval == false) {
    input.select();
  }
  return returnval;
}
<div id="form">
  <h1>Questions? Contact Us!</h1>
  <form onsubmit='return formValidator()'>
    <label for="name">Name:</label>
    <input type='text' id='name' /><br />
    <label for="email">Email:</label>
    <input type='text' id='email' /><br />
    <label for="date">Date: </label>
    <input type="text" id="date" required /> <br>
    <label for="message">Question:</label>
    <textarea name="message" rows="8" cols="20" required>Please make sure your question is at least five words.</textarea> <br>
    <input type='submit' value='Check Form' />
  </form>
</div>

【讨论】:

  • 请注意,我在这里保留了您最初的“文本”类型,因为这不是问题的一部分。我也没有解决“问题”输入,这是一个全新的问题,但考虑到它包含的“文本”似乎需要工作。
  • @RobG 因为我确实提供了解释,所以您的评论确实无效
猜你喜欢
  • 1970-01-01
  • 2018-02-07
  • 1970-01-01
  • 1970-01-01
  • 2021-02-23
  • 1970-01-01
  • 1970-01-01
  • 2017-06-04
  • 1970-01-01
相关资源
最近更新 更多