javascript - 在 WSO2 中使用 yyyy-MM-dd 格式验证字符串日期
问题描述
我正在使用 wso2 MI 1.2.0。我需要验证以 yyyy-MM-dd 格式作为字符串出现的日期。需要考虑日期的主要验证并避免以下类型的无效日期。
- 2021-02-29
- 2021-03-32
- 2021-14-03
- 2021-1r-09
- 2020-10-09t
我尝试使用下面提到的脚本调解器。但是在尝试调用new Date()函数时它传递了无效的日期。
<script language="js"><![CDATA[var myDate = mc.getProperty("myDate");
var regEx = /^\d{4}-\d{2}-\d{2}$/;
var isMyDateValid = 'false';
if(isValidDate(myDate)) {
isMyDateValid = 'true';
}
function isValidDate(dateString) {
var log = mc.getServiceLog();
log.info("Logging inside Script Mediator"+dateString);
var regEx = /^\d{4}-\d{2}-\d{2}$/;
if(!dateString.match(regEx)) {
return false;
}
var d = new Date(dateString);
log.info("Logging inside Script Mediator d : "+d);
var dNum = d.getTime();
if(!dNum && dNum !== 0){
return false;
}
return d.toISOString().slice(0,10) === dateString;
}
mc.setProperty("isMyDateValid", isMyDateValid);]]></script>
克服这个问题的最佳方法是什么?或者也欢迎任何其他替代建议。先感谢您!
解决方案
WSO2 Script Mediator 的问题在于它不直接以所选语言运行脚本,而是将自身包装到 Java 中然后尝试运行。这就是为什么有时 JavaScript 不能按预期工作的原因。最好用 Java 编写代码——是的,你可以这样做。对于您可以使用的验证问题,如下所示:
<script language="js"><![CDATA[
var myDate = mc.getProperty("myDate");
try {
//Java 8 uses 'uuuu' for year, not 'yyyy'. In Java 8, ‘yyyy’ means “year of era” (BC or AD).
var dateFormat = "uuuu-MM-dd";
var dtf = java.time.format.DateTimeFormatter.ofPattern(dateFormat);
java.time.LocalDate.parse(myDate, dtf.withResolverStyle(java.time.format.ResolverStyle.STRICT));
mc.setProperty("isMyDateValid", true);
} catch (error) {
mc.setProperty("isMyDateValid", false);
}
]]></script>
推荐阅读
- c++ - 将数组元素中的双精度值返回到控制台
- .net - 我创建了一个接受命令行参数/拖放的 VB.NET 表单应用程序。我如何让它与控制台对话?
- python - 烧瓶表单没有验证
- python - 如何使用 Selenium TimeoutException 修复未绑定的本地错误
- javascript - 在 ReactJS 中使用按钮过滤数据
- linux - i3 将编号分配给窗口并移动到编号
- python - 在 python3.6 上安装 pycrypto
- ckeditor5 - CKEditor 5 Angular 与提及插件
- excel - VBA 从工作表选择中取消选择行和列
- outlook - AdaptiveCard 无法在 Office 365 Proplus Outlook 中呈现