我需要一个带有字符串YYYY-MM-DD-XXXX
的正则表达式(最后4个仅用于性别/区域的目的)检查有效出生日期的前8个数字是非常重要的。
到目前为止我有这个:
/^([0-9]{4})\-([0-9]{2})\-([0-9]{2})\-([0-9]{4})$/
另外,我想查看输入年龄至少为18岁。如果somone对如何实现这一目标有一些意见,我将不胜感激。
编辑:上面的正则表达式在JS中测试过,但在ASP中也可以正常工作吗?
答案 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,它提供了一种易于使用的方法。
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>
答案 2 :(得分:0)
以下内容将任何年与有效的日/月组合相匹配,但不会进行验证,例如检查您未在2月份输入31天。
^[0-9]{4}\-(0[1-9]|1[012])\-(0[1-9]|[12][0-9]|3[01])\-[0-9]{4}$
不确定你想要实现什么,但我建议使用日期库来做这类事情。如果输入的日期无法解析为对象,则可以以某种方式向用户返回消息。
为了进行年龄验证,您肯定需要使用库,因此正则表达式只能用于日期验证目的