0
var chkdate=document.getElementById('date');
var dateformat=/^[0-9]{4}\-(0[1-9]|1[012])\-(0[1-9]|[12][0-9]|3[01]){2}/;

if(!dateformat.test(chkdate.value))
{
    alert("Please format the date in yyyy-mm-dd format.");
    return false;
}

和html:

<form name="test" action="" onsubmit="return validateForm()" method="post">
Name: <input type="text" placeholder="First Last" name="name" id="name"><br />
Date: <input type="text" placeholder="yyyy-mm-dd" name="date" id="date"><br />
Number: <input type="integer" placeholder="Any integer/decimal" name="number" id="number"><br /><br />
<input type="submit" value="Submit">

验证以 yyyy-mm 格式进行,但当天允许您在末尾输入任意数量的数字。即 2013-06-14444444444 将通过。我想将其纯粹限制为 yyyy-mm-dd。我将如何超越实现这一目标?

4

3 回答 3

2

在与行尾匹配的末尾添加“ $ ”符号:

var dateformat=/^[0-9]{4}\-(0[1-9]|1[012])\-(0[1-9]|[12][0-9]|3[01]){2}$/;
于 2013-06-14T20:24:06.173 回答
1

通过在末尾添加 a 来更新模式行$以指定这是模式结束的位置:

var dateformat=/^[0-9]{4}\-(0[1-9]|1[012])\-(0[1-9]|[12][0-9]|3[01]){2}$/;
于 2013-06-14T20:25:36.990 回答
0

仅在末尾添加 a$并不能完全解决它,因为您还有 a{2}让最后一个捕获组重复自身,而不是yyyy-mm-dd检查yyyy-mm-ddxxxx例如dd.

/^[0-9]{4}\-(0[1-9]|1[012])\-(0[1-9]|[12][0-9]|3[01]){2}$/
    .test('2013-06-1414');   // true, wait what?

只需将其删除即可修复

var re = /^[0-9]{4}\-(0[1-9]|1[012])\-(0[1-9]|[12][0-9]|3[01])$/;

re.test('2013-06-1414');     // false
re.test('2013-06-14');       // true
于 2013-06-14T20:42:11.887 回答