![](/img/trans.png)
[英]I am trying to validate a string with a regular expression in the javascript controller?
[英]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()">
我已经在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
方法检查日期是否有效)。
您的正则表达式似乎运行良好。 但是,您忘记了函数声明中的date
参数,这可能是问题所在。
function validateDate(date) {
...
}
哦,好的,我看到您编辑了问题,我的理解更好。 在为输入元素赋予name
属性时,将引用此元素。 因此,如果要使用名为date
的输入的值,则必须使用date.value
。
我用您的代码并使用date.value
了一个date.value
: http : //jsfiddle.net/BssTY/
您可以添加更多详细信息以进一步限制输入:
^(([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
验证日期不只是检查格式,还有更多。 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
使用像这样的简单验证:
validformat=/^\d{2}\/\d{2}\/\d{4}$/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.