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

我在使用正则表达式验证我的日期格式(即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测试了该正则表达式,它通过得很好。
但是,不确定是否要通过它进行更正?

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


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

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

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函数中转义引号 - javascript

我正在尝试将变量传递给javascript函数。根据用户的选择,它可以是文本或图像。这里已经讨论了类似的问题,但我无法解决。在php中,我这样编码:if ($choice == 1) { $img = '<img src = "../folder/'.$_SESSION["img"].'�…

如何在没有for循环的情况下在Javascript中使用Django模板标签 - javascript

我想在JavaScript中使用模板变量:我的问题是在javascript代码中使用for循环,for循环之间的所有事情都会重复..但我不想要....下面粘贴了我的代码..有人可以告诉我更好的方法吗这..因为这看起来很丑..这是我的代码: {% block extra_javascript %} <script src="/static/js…

使用JS和PHP更改弹出窗口背景图像 - javascript

我有一个JS函数:function zoom(now) { document.getElementById("popup").style.display = "block"; document.getElementById("photos").style.backgroundImage = …

打印二维阵列 - javascript

我正在尝试打印子元素。在this example之后。怎么做?。$myarray = array("DO"=>array('IDEAS','BRANDS','CREATIVE','CAMPAIGNS'), "JOCKEY"=>a…

获取JavaScript值到C#字符串 - javascript

                        是否可以在C#中执行类似的操作?该值为“ 10/05/2014”string jsValue = javascript("$('#EstimatedStartDate').val()"); 参考方案 您能否更详细地阐明您要做什么。看来您正在尝试从javascript(客户…