gpt4 book ai didi

javascript - 正则表达式日期格式验证

转载 作者:行者123 更新时间:2023-11-27 23:17:31 27 4
gpt4 key购买 nike

我在验证日期格式(即 dd/mm/yyyy)时遇到正则表达式问题。

基本上,我构建了客户端 Javascript,用于从后面的代码检查数据格式,如下所示

public static string CalendarJS()
{
string sCalendarJS = string.Empty;
sCalendarJS = "<script type=\"text/javascript\">" +
"function checkDate(){" +
"var sDate = document.getElementById(\"ddlDays\").value;" +
"var sMonth = document.getElementById(\"ddlMonth\").value;" +
"var sYear = document.getElementById(\"ddlYear\").value;" +
"var cDate = sDate + \"/\" + sMonth + \"/\" + sYear;" +
"validatedate(cDate);" +
"}" +
"function validatedate(input){" +
"var validformat= '^\\d{2}\\/\\d{2}\\/\\d{4}$';" +
"var returnval=false;" +
"if (!validformat.test(input.value))" +
"alert(\"Invalid Date Format. Please correct and submit again.\");" +
"else{" +
"var monthfield=input.value.split(\"/\")[0];" +
"var dayfield=input.value.split(\"/\")[1];" +
"var yearfield=input.value.split(\"/\")[2];" +
"var dayobj = new Date(yearfield, monthfield-1, dayfield);" +
"if ((dayobj.getMonth()+1!=monthfield)||(dayobj.getDate()!=dayfield)||(dayobj.getFullYear()!=yearfield))" +
"alert(\"Invalid Day, Month, or Year range detected. Please correct and submit again.\");" +
"else" +
"returnval=true;" +
"}" +
"if (returnval=false) input.select();" +
"return returnval;" +
"}" +
"</script>";

return sCalendarJS;
}

我通过传入日期参数​​来调用提交按钮的单击事件,例如2016 年 1 月 1 日。

但是,它似乎因“日期格式无效”而失败。日期验证的正则表达式是 ^\d{2}/\d{2}/\d{4}$ 我已经在这里测试了正则表达式 http://www.regular-expressions.info/javascriptexample.html一切顺利。但是,不确定我是否通过了更正?

我不得不在正则表达式中添加额外的反斜杠,因为它提示表达式中的“无法识别的转义序列”。我不确定这是否是解决此问题的正确方法?

解决方案我删除了日期格式验证的正则表达式,因为我为日期、月份和年份字段设置了下拉列表。因此,这些都不是输入的,因此在我设置格式时不需要验证。唯一需要做的就是检查给定月份的闰年和日期范围。

无论如何,它不能解决正则表达式的问题,但确实为其他检查提供了解决方案

string sCalendarJS = string.Empty;
sCalendarJS = @"<script type='text/javascript'>
function checkDate(){
var sDate = document.getElementById('ddlDays').value;
var sMonth = document.getElementById('ddlMonth').value;
var sYear = document.getElementById('ddlYear').value;
var cDate = sMonth + '/' + sDate + '/' + sYear;
if (validatedate(cDate) == true) return true;
}
function validatedate(input){
var returnval=false;
var monthfield=input.split('/')[0];
var dayfield=input.split('/')[1];
var yearfield=input.split('/')[2];
var dayobj = new Date(yearfield, monthfield-1, dayfield);
if ((dayobj.getMonth()+1!=monthfield)||(dayobj.getDate()!=dayfield)||(dayobj.getFullYear()!=yearfield))
alert('Invalid Day, Month, or Year range detected. Please correct and submit again.');
else
returnval=true;
return returnval;
}
</script>";

希望这有帮助吗?

最佳答案

有两件事:(1) C# 通过在其前面加上 @ 前缀来使用原始字符串文字(不记得来自哪个版本)。 (2) Javascript 允许单引号和双引号作为字符串分隔符。使用单引号以避免必须从 C# 转义。

试试这个:

sCalendarJS = @"<script type='text/javascript'>
function checkDate(){
var sDate = document.getElementById('ddlDays').value;
var sMonth = document.getElementById('ddlMonth').value;
var sYear = document.getElementById('ddlYear').value;
var cDate = sDate + '/' + sMonth + '/' + sYear;
validatedate(cDate);
}
function validatedate(input){
var validformat= '^\\d{2}\\/\\d{2}\\/\\d{4}$';
var returnval=false;
if (!validformat.test(input.value))
alert('Invalid Date Format. Please correct and submit again.');
else {
var monthfield=input.value.split('/')[0];
var dayfield=input.value.split('/')[1];
var yearfield=input.value.split('/')[2];
var dayobj = new Date(yearfield, monthfield-1, dayfield);
if ((dayobj.getMonth()+1!=monthfield)||(dayobj.getDate()!=dayfield)||(dayobj.getFullYear()!=yearfield))
alert('Invalid Day, Month, or Year range detected. Please correct and submit again.');
else
returnval=true;
}
if (returnval=false) input.select();
return returnval;
}
</script>";

关于javascript - 正则表达式日期格式验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35703880/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com