正则表达式验证正确的出生日期和检查年龄

时间:2014-02-13 10:56:38

标签: asp.net regex razor

我需要一个带有字符串YYYY-MM-DD-XXXX的正则表达式(最后4个仅用于性别/区域的目的)检查有效出生日期的前8个数字是非常重要的。

到目前为止我有这个:

/^([0-9]{4})\-([0-9]{2})\-([0-9]{2})\-([0-9]{4})$/

另外,我想查看输入年龄至少为18岁。如果somone对如何实现这一目标有一些意见,我将不胜感激。

编辑:上面的正则表达式在JS中测试过,但在ASP中也可以正常工作吗?

3 个答案:

答案 0 :(得分:0)

我已经改变了你的正则表达式,使它看起来更真实

^([1-2]\d{3})\-([0-1][1-9])\-([0-3][0-9])\-([0-9]{4})$
像3012这样的年代不会过去。

现在你想知道一个人是否是18岁。

一种方法可能是找到像这样提供的日期之间的差异

var str = '1990-09-12-5555';
var res = /^([1-2]\d{3})\-([0-1][1-9])\-([0-3][0-9])\-([0-9]{4})$/.exec(str);
var year_now = new Date().getFullYear();
console.log(year_now-res[1]);

第二种方法会更准确:

var str = '1990-09-12-5555';
var res = /^([1-2]\d{3})\-([0-1][1-9])\-([0-3][0-9])\-([0-9]{4})$/.exec(str);
var todays_date = new Date();
var birth_date = new Date(res[1],res[2],res[3]);
console.log(todays_date-birth_date);

将以毫秒为单位输出结果。您可以将数学转换为年份

干杯,希望有所帮助!

答案 1 :(得分:0)

我建议使用moment.js,它提供了一种易于使用的方法。

interactive demo

function validate(date){
    var eighteenYearsAgo = moment().subtract("years", 18);
    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>

Source

答案 2 :(得分:0)

以下内容将任何年与有效的日/月组合相匹配,但不会进行验证,例如检查您未在2月份输入31天。

^[0-9]{4}\-(0[1-9]|1[012])\-(0[1-9]|[12][0-9]|3[01])\-[0-9]{4}$

不确定你想要实现什么,但我建议使用日期库来做这类事情。如果输入的日期无法解析为对象,则可以以某种方式向用户返回消息。

为了进行年龄验证,您肯定需要使用库,因此正则表达式只能用于日期验证目的