我最近开始使用Javascript。我正在测试的是以有效格式检查DoB。下一步将检查年龄。
我的HTML代码包含在
之下<form name="ProcessInfo" action="#" method="POST" enctype="multipart/form-data" target="_self" onsubmit="return checkForm();">
.
.
.
.
<br>
<label for="txtDOB">Date of Birth:* </label>
<input id="txtDOB" type="text" name="txtDOB" size="12">
format: ##/##/####
<br>
.
.
.
</form>
.
.
我在.js文件中执行了以下操作
var errMessage = "";
function checkForm() {
validateName();
validateSurname();
carSelect();
validateDOB();
if (errMessage == "") {
} else {
alert(errMessage);
}
}
...
function validateDOB()
{
var dob = document.forms["ProcessInfo"]["txtDOB"].value;
var pattern = /^([0-9]{2})-([0-9]{2})-([0-9]{4})$/;
if (dob == null || dob == "" || !pattern.test(dob)) {
errMessage += "Invalid date of birth\n";
return false;
}
else {
return true
}
}
我尝试检查它是否对正则表达式有效,但即使我正确输入日期,我总是会收到提醒。如何分离DD / MM / YYYY来计算年龄?
答案 0 :(得分:21)
如果要在格式中使用正斜杠,则需要使用正则表达式中的反斜杠进行转义:
var pattern =/^([0-9]{2})\/([0-9]{2})\/([0-9]{4})$/;
答案 1 :(得分:13)
我建议使用moment.js,它提供了一种易于使用的方法。
function validate(date){
var eighteenYearsAgo = moment().subtract(18, "years");
var birthday = moment(date);
if (!birthday.isValid()) {
return "invalid date";
}
else if (eighteenYearsAgo.isAfter(birthday)) {
return "okay, you're good";
}
else {
return "sorry, no";
}
}
要在页面中包含片刻,您可以使用CDNJS:
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.4.0/moment.min.js"></script>
答案 2 :(得分:7)
我会利用内置的Date
对象为我做验证。即使您从-
切换到/
,您仍然需要检查月份是否在0到12之间,例如,日期介于0到31之间,以及1900到2013之间的年份。
function validateDOB(){
var dob = document.forms["ProcessInfo"]["txtDOB"].value;
var data = dob.split("/");
// using ISO 8601 Date String
if (isNaN(Date.parse(data[2] + "-" + data[1] + "-" + data[0]))) {
return false;
}
return true;
}
答案 3 :(得分:5)
如果要在格式中使用正斜杠,则需要使用正则表达式中的反斜杠进行转义:
var dateformat = /^(0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])[\/\-]\d{4}$/;
&#13;
答案 4 :(得分:1)
您已使用此格式的正则表达式: DD - MM- YYYY
如果您需要此格式DD / MM / YYYY使用
var pattern =/^([0-9]{2})\/([0-9]{2})\/([0-9]{4})$/;
答案 5 :(得分:1)
这是两个问题 - 是斜杠正确的地方,是一个有效的日期。 我建议你抓住输入变化并在自己中添加斜杠。 (为用户烦恼)
有趣的问题是他们是否提出了有效的日期,我建议利用js的灵活性:
function isValidDate(str) {
var newdate = new Date();
var yyyy = 2000 + Number(str.substr(4, 2));
var mm = Number(str.substr(2, 2)) - 1;
var dd = Number(str.substr(0, 2));
newdate.setFullYear(yyyy);
newdate.setMonth(mm);
newdate.setDate(dd);
return dd == newdate.getDate() && mm == newdate.getMonth() && yyyy == newdate.getFullYear();
}
console.log(isValidDate('jk'));//false
console.log(isValidDate('290215'));//false
console.log(isValidDate('290216'));//true
console.log(isValidDate('292216'));//false
&#13;
答案 6 :(得分:1)
使用模式并检查验证:
var input = '33/15/2000';
var pattern = /^((0[1-9]|[12][0-9]|3[01])(\/)(0[13578]|1[02]))|((0[1-9]|[12][0-9])(\/)(02))|((0[1-9]|[12][0-9]|3[0])(\/)(0[469]|11))(\/)\d{4}$/;
alert(pattern.test(input));
答案 7 :(得分:0)
要获取值,请使用pattern.exec()而不是pattern.test()(。test()返回一个布尔值)。
答案 8 :(得分:0)
if(!/^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{2}$/.test($(this).val())){
alert('Date format incorrect (DD/MM/YY)');
$(this).datepicker('setDate', "");
return false;
}
此代码将验证日期格式DD / MM / YY
答案 9 :(得分:0)
日期和月份的前导零
var pattern =/^(0[1-9]|1[0-9]|2[0-9]|3[0-1])\/(0[1-9]|1[0-2])\/([0-9]{4})$/;
并且前导零和/无前导零日
var pattern =/^(0?[1-9]|1[0-9]|2[0-9]|3[0-1])\/(0?[1-9]|1[0-2])\/([0-9]{4})$/;
答案 10 :(得分:0)
我使用我找到的代码@。w3resources
代码负责
甚至适用于闰年。 在我的项目中使用闰年我修改代码如
if((lyear == false)&amp;&amp;(dd&gt; = 29))
{
alert('日期格式无效!');
返回false;
}
if((lyear == false)&amp;&amp;(dd&gt; = 29))
{
警报('不是闰年2月不能超过28天');
返回false;
}
而不是抛出通用的“无效日期格式”错误,这对用户没有多大意义。 我修改了剩下的代码,提供有效的错误信息,比如月份不能超过12天,天数也不能超过31等。
使用正则表达式的问题是难以准确识别出错的地方。它要么给出真或假 - 没有任何理由为什么它失败了。我们必须编写多个正则表达式来解决这个问题。
答案 11 :(得分:0)
echo $HOME/.ansible/tmp/ansible-tmp-1474479086.86-239783828445202
答案 12 :(得分:0)
你可以使用html标签的属性而不是html输入类型=&#34; date&#34;可以用来代替验证它。这就是html 5给你带来的好处
答案 13 :(得分:0)
如果您正在使用moment
,那就是单行代码:
moment(date).format("DD/MM/YYYY").isValid()
答案 14 :(得分:0)
当我们只放置模式时,检查每种可能的日期组合并不简单。用户可以输入有效的数字,例如99/99/9999,但这不是一个有效的日期。即使我们将天和月份的值限制在一个更严格的值(30/31天和0-12个月),我们仍然可能遇到leap年,febraury等问题,我们无法使用正则表达式正确验证它们。因此,更好的方法是使用日期对象本身。
let InputDate = "99/99/9999"
let pattern =/^([0-9]{2})\/([0-9]{2})\/([0-9]{4})$/;
let editDate = InputDate.replace("\/","-")
let dateValidation = function validation(){
if(pattern.test(InputDate) && new Date(editDate) == 'Invalid Date'){
return false;
}else{
return true;
}
}
console.log(dateValidation()) //Return false