【发布时间】:2020-09-26 17:00:18
【问题描述】:
我的网络编程课程作业有问题,我应该在 javascript 中使用正则表达式来验证日期输入,我的返回是 ISO8601 格式。
这是我使用的表达式
/^(\d{4})-(\d{2})-(\d{2})$/
到目前为止,即使日期正确,它仍然作为无效日期返回。 here's the regular expression 在 notepad++ 中的样子。
The value for the date input 根据控制台返回为“2020-09-26”
我正在使用
var order_date = "2020-09-26"
var regDate = new RegExp('^(\d{4})-(\d{2})-(\d{2})$');
if (!regDate.test(order_date)){
valid = false;
document.getElementById("err5").innerHTML = "** Not a valid date";
}
检查输入字段的值,如果它无效,则将有效变量设置为 false 并将错误消息添加到 HTML 中的错误范围。这是我的编辑器中代码本身的屏幕截图。
在我尝试使用正则表达式之前,语句是
if(order_date === "" || order_date.length < 8 || order_date.length > 10)){
valid = false;
document.getElementById("err5").innerHTML = "** Not a valid date";
}
它在技术上是有效的,它可以接受 ISO8601 格式的日期并判断它是否合适并返回有效,但显然这个检查可以接受无效的日期,所以我们被告知使用正则表达式来改进检查。
只是需要一些帮助来了解为什么这不起作用。据我所知,正则表达式本身没有问题,所以也许是我的 javascript 的其余部分或其他问题?任何建议都有帮助
【问题讨论】:
-
这能回答你的问题吗? regexp Parsing ISO-8601
-
请使用
regDate分配和分配给order_Date的示例值完成您问题中的代码,以便我们可以运行并重现您描述的问题。当您尝试使其在 JavaScript 中工作时,不确定为什么要谈论 notepad++。这使您的问题令人困惑。请专注于两者之一。 -
@trincot 我添加了 regDate 和 order_date 分配,order_date 只是一个示例值,因为它实际上从我正在使用的 html 表单中提取值,但它与我正在提取的值匹配从表格
-
@ChristianBaumann 看起来不像,似乎他的问题是检查日期结束时的时间,但我试图验证的值没有时间。从我一直在阅读的内容来看,正则表达式似乎很好,所以这可能是我缺少的 js 的问题?
-
问题是
new RegExp('/^(\d{4})-(\d{2})-(\d{2})$/');。它必须是regDate = new RegExp('^(\\d{4})-(\\d{2})-(\\d{2})$');(将字符串文字传递给new RegExp)或-更好-只是regDate = /^(\d{4})-(\d{2})-(\d{2})$/;(正则表达式文字)。
标签: javascript regex validation