我试图用JavaScript中的正则表达式验证日期,但它不能正常工作
I am trying to validate a date with a regular expression in JavaScript but it is not working correctly?
我试图用JavaScript验证一个简单的日期,但无论我输入什么日期,它都会出现错误。我知道我可能在做蠢事,但我找不到解决办法。
<script type="text/javascript">
/* <![CDATA[ */
function validateDate(date) {
var dateCheck = /^(0?[1-9]|[12][0-9]|3[01])['/'-](0?[1-9]|1[012])['/'-]'d{4}$/;
if (dateCheck.test(date) == false) {
window.alert("Please enter a correct date");
}
else {
window.alert("The date was entered correctly!");
}
}
/* ]]> */
</script>
Please enter a date:
input type='text' name='date' id='date'>
input type='button' name="submitDate" id='submitDate' value='Submit' onclick="validateDate()">
您的正则表达式似乎工作得很好。但是,您忘记了函数声明中的date
参数,这可能是问题所在。
function validateDate(date) {
...
}
哦,好的,我看到你编辑了你的问题,我更好地理解。当您将name
属性提供给一个输入元素时,您创建了对该元素的引用。因此,如果您想使用名为date
的输入值,则必须使用date.value
。
我已经做了一个jsFiddle与您的代码和使用date.value
: http://jsfiddle.net/BssTY/
我已经在这个jsFiddle以及rubular.com上的正则表达式本身上测试了它,两者都使用格式为"xx-xx-xxxx"的日期。当您尝试使用"xx-xx-xx"等格式时,它会失败。
示例代码:
var dateCheck = /^(0?[1-9]|[12][0-9]|3[01])['/'-](0?[1-9]|1[012])['/'-]'d{4}$/;
if (dateCheck.test("02-03-2013") == false) {
window.alert("Please enter a correct date");
} else {
window.alert("The date was entered correctly!");
}
你到底想检查什么格式?也许你想看看XDate,它提供了一个非常好的JavaScript库来处理日期(你可以用.valid
方法检查日期是否有效)。
您可以添加更多细节来进一步限制输入:
^(([1-9]|[0][0-9]|[1-2][0-9]|[3][0-1])('/|'-)([1-9]|[0][1-9]|[1][0-2])('/|'-)([1-9]{1}[0-9]{3}|[0-9]{2}))$
见http://rubular.com/r/uTJ55LKzMK
分解检查月份天数的正则表达式:
([1-9]|[0][0-9]|[1-2][0-9]|[3][0-1])
- Single digit, eg. 1 or 2 or 3 up to 9
- OR, can be double digits leading with 0, eg. 01 or 02 or 03 up to 09
- OR, can be double digits leading with 1 or 2, eg. 10 or 11 or 22 or 23 up to 29
- OR, can be double digits leading with 3, eg. 30 or 31
检查month:
的正则表达式([1-9]|[0][1-9]|[1][0-2])
- Single digit, eg. 1 or 2 or 3 up to 9
- OR, can be double digits leading with 0, eg. 01 or 02 or 03 up to 09
- OR, can be double digits leading with 1, eg. 10 or 11 or 12
检查年份的正则表达式:
([1-9]{1}[0-9]{3}|[0-9]{2})
- Four digits leading with # in range [1-9], eg. 1001 or 1100, up to 9999
- OR, can be double digits leading with # in range [0-9], eg. 00 or 01 up to 99
验证日期不仅仅是检查格式。OP函数认为"30-02-2013"可以。测试字符串的一种方法是创建一个date对象,并与原始对象进行检查,例如
// Format dd-mm-yyyy
function validateDate(s) {
s = s.split('-');
var d = new Date(s[2], --s[1], s[0]);
return !!d && d.getMonth() == s[1] && d.getDate() == s[0];
}
validateDate('30-02-2013'); // false
validateDate('29-02-2000'); // true
使用如下的简单验证:
validformat=/^'d{2}'/'d{2}'/'d{4}$/
相关文章:
- javascript扫雷器floodfill算法不能正常工作
- 为什么这个代码不能正常工作
- 为什么我的JavaScript在Safari上的严格模式下不能正常工作
- 为什么Turbolinks不能正常工作?Rails应用程序
- 用户名输入如果其他块不能正常工作/Javascript-jQuery-AJAX
- 为什么动态加载的事件在我的代码中不能正常工作
- 为什么竞争不能在离子中显示(隐藏在标题下方)(离子竞争不能正常工作)
- 变量只能在函数中局部工作,不能全局工作-Javascript
- 为什么AngularJS$作用域不能正常工作
- 反向名称的JavaScript函数不能正确工作(例如学习JavaScript-O'Reilly)
- 两个独立工作的javascript函数,但不能一起工作
- Rcharts 和 D3 图不能协同工作
- jquery gallery 不能完全工作
- Caret函数没有'如果插入符号在最后一个位置,就不能正常工作
- 如果else-bind不能正常工作,则淘汰
- 我的ajax加载栏出了什么问题?为什么它不能正常工作
- 为什么不'我的if/else语句不能正常工作
- 为什么我的Javascript代码不能正常工作
- 选中的单选按钮在jQuery模式对话框中不能正常工作
- jquery draggable和resizable在动态生成的元素中不能一起工作