Javascript 不允许在输入框中输入数字
嗨,我有一个接受数字的函数,但它有一些问题 1我希望它接受斜杠,即“/” 2在第一次输入时,出于某种原因,它接受字母 它绑定到一个knockout keyup函数Javascript 不允许在输入框中输入数字,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,嗨,我有一个接受数字的函数,但它有一些问题 1我希望它接受斜杠,即“/” 2在第一次输入时,出于某种原因,它接受字母 它绑定到一个knockout keyup函数 <input id="txtboxToFilter" type="text" placeholder="dd/mm/yyyy" maxlength="10" data-bind="value: Observable.birthdate(), valueUpdate: 'keyup', event: { keyup: Check
<input id="txtboxToFilter" type="text" placeholder="dd/mm/yyyy" maxlength="10" data-bind="value: Observable.birthdate(), valueUpdate: 'keyup', event: { keyup: CheckDate}" />
function CheckDate(){
document.getElementById('txtboxToFilter').onkeydown = function(evt) {
var charCode = (evt.which) ? evt.which : evt.keyCode;
if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57))
return false;
return true;
}
}
然后调用这个函数
<input id="txtboxToFilter" type="text" placeholder="dd/mm/yyyy" maxlength="10" data-bind="value: Observable.birthdate(), valueUpdate: 'keyup', event: { keyup: CheckDate}" />
function CheckDate(){
document.getElementById('txtboxToFilter').onkeydown = function(evt) {
var charCode = (evt.which) ? evt.which : evt.keyCode;
if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57))
return false;
return true;
}
}
有人帮忙吗 您当然可以使用正则表达式: 这里有一个也将支持闰年:
^(?:(?:31(\/)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$
JS代码:
document.getElementById('txtboxToFilter').onblur= function(e) {
alert(validateDate(document.getElementById('txtboxToFilter').value));
}
function validateDate(dob) {
var re = /^(?:(?:31(\/)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/)(?:0?[1,3-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/)0?2\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$/;
return re.test(dob);
}
小提琴:
注意:如果您愿意,我已将事件从keyup更改为blur
这是键盘上的…请相应更改
您将函数绑定到keyup,然后又绑定到keydown?出于某种原因,如果不这样做,它就无法工作。注意,标题似乎与您的帖子相矛盾。如果不允许使用数字,日期输入肯定会缺乏很多实用性。或者,通过数字,你指的是什么?看看如何处理键盘输入;您可以将regex用于'dd\mm\yyyy'格式:我们不能在1/01/1600:D之前出生