我目前有:
<input type="text" wicket:id="singleDateField" pattern="(?:(?:0[1-9]|1[0-2])[/\-. ]?(?:0[1-9]|[12][0-9])|(?:(?:0[13-9]|1[0-2])[/\-. ]?30)|(?:(?:0[13578]|1[02])[/\-. ]?31))[/\-. ]?(?:19|20)[0-9]{2}"/>
但我需要在键入两个数字后添加/
,然后在键入另外两个数字之后添加/
,然后在输入4位数年份之后不允许再键入。我希望格式是预先确定的,这样就不需要错误消息,用户也不能键入不可接受的日期。
我希望这是合理的,我可以利用帮助!
最近http://nosir.github.io/cleave.js/在GitHub上流行。我觉得它真的很整洁!它是纯JavaScript解决方案。
您可以使用在每个版本中将由"oninput"调用的函数。在此函数中,必须在天和月之后添加斜线。为了防止多年后添加字符,请在输入中使用maxlength。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
function AddSlash(input){
var dataString=input.value; //get input value
if(dataString[dataString.length-1]=='/') //slash already is
return;
while(dataString.indexOf('/')!=-1) //remove slash
dataString=dataString.replace('/', '');
var newDataString=dataString.substring(0, 2); //copy days
if(dataString.length>2) //add slash after days
{
newDataString+='/';
newDataString+=dataString.substring(2, 4); //copy months
if(dataString.length>4) //add slash after months
{
newDataString+='/';
newDataString+=dataString.substring(4, 8); //copy years
}
}
input.value=newDataString; //change input text
}
</script>
</head>
<body>
<form>
<input id="dataInput"
oninput="AddSlash(this)"
maxlength="10"
pattern="^(?:(?:31(/)(?:0[13578]|1[02]))1|(?:(?:29|30)(/)(?:0[1,3-9]|1[0-2])2))d{4}$|^(?:29(/)(?:02)3(?:(?:d{2}(?:0[48]|[2468][048]|[13579][26])|(?:(?:[2468][048]|[13579][26])00))))$|^(?:0[1-9]|1d|2[0-8])(/)(?:(?:0[1-9])|(?:1[0-2]))4d{4}$" />
</form>
</body>
</html>