0

我正在尝试使用 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()">
4

5 回答 5

1

我已经在这个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方法检查日期是否有效)。

于 2013-04-02T08:38:30.127 回答
1

您的正则表达式似乎运行良好。但是,您忘记了date函数声明中的参数,这可能是问题所在。

function validateDate(date) {
    ...
}

哦,好吧,我看到你编辑了你的问题,我明白了。当你给name一个输入元素一个属性时,你就引用了这个元素。所以如果你想使用命名输入的值date,你必须使用date.value.

我用你的代码制作了一个 jsFiddle 并使用date.value:http: //jsfiddle.net/BssTY/

于 2013-04-02T08:43:40.397 回答
1

您可以添加更多详细信息以进一步限制输入:

^(([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

检查月份的正则表达式:

([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
于 2013-04-02T09:02:08.827 回答
0

验证日期不仅仅是检查格式。OP 函数认为“30-02-2013”​​是可以的。测试字符串的一种方法是创建一个日期对象并检查原始对象,例如

 // 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
于 2013-04-02T08:58:15.847 回答
-2

使用这样的简单验证:

validformat=/^\d{2}\/\d{2}\/\d{4}$/
于 2013-04-02T08:32:44.840 回答