Javascript日期验证(DD/MM/YYYY)和年龄检查

A. *_*lar 10 html javascript validation

我最近开始使用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>
.
.
Run Code Online (Sandbox Code Playgroud)

我在.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
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试检查它是否与正则表达式有效,但即使我正确输入日期,我总是会收到警报.我如何分离DD/MM/YYYY来计算年龄?

Dra*_*cir 21

如果要在格式中使用正斜杠,则需要使用正则表达式中的反斜杠进行转义:

var pattern =/^([0-9]{2})\/([0-9]{2})\/([0-9]{4})$/;
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/P9TER/

  • 这是不正确的,因为它可以接受像20/20/2010这样的日期 (22认同)
  • 您可能还想考虑将`{2}`更改为`{1,2}`,以便允许日期为"3/6/1990" - 如果您愿意的话.当然,您可以强制用户填充零. (6认同)
  • 答案不完整.不存在日期和月份的范围检查. (2认同)
  • 它接受未来的一年,这是不可预期的. (2认同)

Bri*_*and 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";    
    }
}
Run Code Online (Sandbox Code Playgroud)

要在页面中包含时刻,您可以使用CDNJS:

<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.4.0/moment.min.js"></script>
Run Code Online (Sandbox Code Playgroud)


Lim*_* H. 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;
}
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse#Example:_Using_parse.


小智 5

如果要在格式中使用正斜杠,则需要使用正则表达式中的反斜杠进行转义:

   
var dateformat = /^(0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])[\/\-]\d{4}$/;
Run Code Online (Sandbox Code Playgroud)