6 javascript validation datetime
我有一个文本字段,用户以格式输入日期时间:dd/mm/YYYY hh:ii.我想使用javascript检查这是否是一个有效的日期时间.这应该包括2月29日和一切.我怎样才能做到这一点?由于特殊的月份,正则表达式不会成功.
请参阅http://internotredici.com/article/checkdateinjavascript/获取有关检查时间的有用文章 - 正是您想要的!
\n\n以下为文章全文
\n\n检查 javascript 中的日期\n文章发表于 2006 年 1 月 31 日,在脚本下\n程序员经常需要验证插入到表单中的信息并检查其正确性,这对于利用 javascript 很有用。本教程将解释如何使用 javascript 来验证日期是否有效。\n表单中的日期以两种不同的方式插入,第一种使用文本字段,其中用户按照不同的模式输入数据(在本教程中,我们假设日期采用 dd-mm-yyyy 格式);第二个使用下拉菜单。第一个解决方案执行起来更简单,但用户会犯更多错误(例如插入无效字符或以与计划不同的格式更频繁地键入日期)。\n假设现在我们有以下内容我们要在其中插入 dd-mm-yyyy 格式的日期的文本字段:
\n\n<form id="test_form" action="get" method="/checkdatejavascript" \nonsubmit="return(check_form(this)); return false;">\n<input type="text" name="datefield" id="datefield" />\n</form>\nRun Code Online (Sandbox Code Playgroud)\n\n为了检查插入数据的正确性,我们将使用 check_form 函数:
\n\nfunction check_form()\n{\n// Regular expression used to check if date is in correct format\nvar pattern = new RegExp([0-3][0-9]-(0|1)[0-9]-(19|20)[0-9]{2});\nif(document.getElementById(\'datefield\').value.match(pattern))\n{\n var date_array = document.getElementById(\'datefield\')\n .value.split(\'-\');\n var day = date_array[0];\n\n // Attention! Javascript consider months in the range 0 - 11\n var month = date_array[1] - 1;\n var year = date_array[2];\n\n // This instruction will create a date object\n source_date = new Date(year,month,day);\n\n if(year != source_date.getFullYear())\n {\n alert(\'Year is not valid!\');\n return false;\n }\n\n if(month != source_date.getMonth())\n {\n alert(\'Month is not valid!\');\n return false;\n }\n\n if(day != source_date.getDate())\n {\n alert(\'Day is not valid!\');\n return false;\n }\n}\nelse\n{\n alert(\'Date format is not valid!\');\n return false;\n}\n\nreturn true;\nRun Code Online (Sandbox Code Playgroud)\n\n}\n正如我们所看到的,以蓝色显示的正则表达式用于控制插入的日期是否遵循默认指定的格式。如果模式有效,则函数继续下一步,否则将引发错误消息,并且不会发送表单(正则表达式还保证日期不能为空)。\n为了验证日期,我们将使用 javascript 提供的 Date 对象。(检查红色代码)。该算法非常简单。使用用户插入的信息,我们将创建一个 Date 对象,并使用 getFullYear、getMonth 和 getDate 方法,我们将生成分别表示与其关联的年、月和日的三个值。如果这些值等于用户插入的值,则日期是正确的。现在考虑以下示例:
\n\n用户在文本字段中插入字符串 09-01-1976\n从字符串创建的日期对象是 09-01-1976\n日期有效
\n\n用户在文本字段中插入字符串 31-02-2006\n从字符串创建的日期对象是 03-03-2006\n日期无效
\n\n程序员必须特别注意(检查绿色代码)JavaScript 处理日期的方式,因为假设 o 是一月,11 是十二月,月份被认为在 0 到 11 的范围内。\n如果使用下拉菜单要插入日期,由于不需要正则表达式来验证日期格式,控件更简单:
\n\n <form id="test_form" action="get" method="/checkdatejavascript" \n onsubmit="return(check_form(this)); return false;">\n <select name="dateday" id="dateday">\n <option value="1">1</option>\n [\xe2\x80\xa6]\n </select>\n <select name="datemonth" id="datemonth">\n <option value="0">January</option>\n [\xe2\x80\xa6]\n </select>\n <select name="dateyear" id="dateyear">\n <option value="2006">2006</option>\n [\xe2\x80\xa6]\n </select>\n </form>\nRun Code Online (Sandbox Code Playgroud)\n\n控制日期正确性的 JavaScript 函数是
\n\n function check_form()\n{\n var day = document.getElementById(\'dateday\').value;\n var month = document.getElementById(\'datemonth\').value;\n var year = document.getElementById(\'dateyear\').value;\n\n // This instruction will create a date object\n source_date = new Date(year,month,day);\n\n if(year != source_date.getFullYear())\n{\n alert(\'Year is not valid!\');\n return false;\n}\n\nif(month != source_date.getMonth())\n{\n alert(\'Month is not valid!\');\n return false;\n}\n\nif(day != source_date.getDate())\n{\n alert(\'Day is not valid!\');\n return false;\n}\n\n return true;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n更新:我已经更新了代码,因为正则表达式存在问题。感谢亚历克斯的建议
\n| 归档时间: |
|
| 查看次数: |
10052 次 |
| 最近记录: |