允许错误字符的Javascript日期验证
出于某种原因,我的日期验证允许通过句号,但仅在该部分日期结束时,例如12/10/201通过,但1.2/10/201不通过 这是我的密码:允许错误字符的Javascript日期验证,javascript,validation,date,Javascript,Validation,Date,出于某种原因,我的日期验证允许通过句号,但仅在该部分日期结束时,例如12/10/201通过,但1.2/10/201不通过 这是我的密码: var iDate = $("check_date").value; if(iDate.length > 0) { var a = iDate.split("/"); if(isValidDate(a[0],a[1]-1,a[2]) == false){ alert("You have entered an inval
var iDate = $("check_date").value;
if(iDate.length > 0) {
var a = iDate.split("/");
if(isValidDate(a[0],a[1]-1,a[2]) == false){
alert("You have entered an invalid date.");
return false;
}
isValidDate = function(day,month,year) {
var dteDate;
dteDate=new Date(year,month,day);
return ((day==dteDate.getDate()) && (month==dteDate.getMonth()) && (year==dteDate.getFullYear()));
}
有什么想法吗?您可以使用函数检查日期是否有效。请看下面的代码:
function isDate(dateStr) {
var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
var matchArray = dateStr.match(datePat); // is the format ok?
if (matchArray == null) {
alert("Please enter date as either mm/dd/yyyy or mm-dd-yyyy.");
return false;
}
month = matchArray[1]; // p@rse date into variables
day = matchArray[3];
year = matchArray[5];
if (month < 1 || month > 12) { // check month range
alert("Month must be between 1 and 12.");
return false;
}
if (day < 1 || day > 31) {
alert("Day must be between 1 and 31.");
return false;
}
if ((month==4 || month==6 || month==9 || month==11) && day==31) {
alert("Month "+month+" doesn`t have 31 days!")
return false;
}
if (month == 2) { // check for february 29th
var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
if (day > 29 || (day==29 && !isleap)) {
alert("February " + year + " doesn`t have " + day + " days!");
return false;
}
}
return true; // date is valid
}
函数isDate(dateStr){
var datePat=/^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
var matchArray=dateStr.match(datePat);//格式正确吗?
if(matchArray==null){
警报(“请输入日期为mm/dd/yyyy或mm dd yyyy”);
返回false;
}
月份=匹配数组[1];//p@rse将日期转换为变量
天=匹配数组[3];
年份=匹配数组[5];
如果(月<1 | |月>12){//检查月范围
警报(“月份必须介于1和12之间”);
返回false;
}
如果(第1天|第31天){
警报(“日期必须介于1和31之间”);
返回false;
}
如果((月=4 |月=6 |月=9 |月=11)和日=31){
警报(“月”+Month+“没有31天!”)
返回false;
}
如果(月==2){//检查2月29日
var isleap=(第%4年==0&&(第%100年!=0 | |第%400年==0));
如果(天>29 | |(天==29&&!isleap)){
警报(“二月+年+”没有“+天+”天!”);
返回false;
}
}
返回true;//日期有效
}
您可以使用函数检查日期是否有效。请看下面的代码:
function isDate(dateStr) {
var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
var matchArray = dateStr.match(datePat); // is the format ok?
if (matchArray == null) {
alert("Please enter date as either mm/dd/yyyy or mm-dd-yyyy.");
return false;
}
month = matchArray[1]; // p@rse date into variables
day = matchArray[3];
year = matchArray[5];
if (month < 1 || month > 12) { // check month range
alert("Month must be between 1 and 12.");
return false;
}
if (day < 1 || day > 31) {
alert("Day must be between 1 and 31.");
return false;
}
if ((month==4 || month==6 || month==9 || month==11) && day==31) {
alert("Month "+month+" doesn`t have 31 days!")
return false;
}
if (month == 2) { // check for february 29th
var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
if (day > 29 || (day==29 && !isleap)) {
alert("February " + year + " doesn`t have " + day + " days!");
return false;
}
}
return true; // date is valid
}
函数isDate(dateStr){
var datePat=/^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
var matchArray=dateStr.match(datePat);//格式正确吗?
if(matchArray==null){
警报(“请输入日期为mm/dd/yyyy或mm dd yyyy”);
返回false;
}
月份=匹配数组[1];//p@rse将日期转换为变量
天=匹配数组[3];
年份=匹配数组[5];
如果(月<1 | |月>12){//检查月范围
警报(“月份必须介于1和12之间”);
返回false;
}
如果(第1天|第31天){
警报(“日期必须介于1和31之间”);
返回false;
}
如果((月=4 |月=6 |月=9 |月=11)和日=31){
警报(“月”+Month+“没有31天!”)
返回false;
}
如果(月==2){//检查2月29日
var isleap=(第%4年==0&&(第%100年!=0 | |第%400年==0));
如果(天>29 | |(天==29&&!isleap)){
警报(“二月+年+”没有“+天+”天!”);
返回false;
}
}
返回true;//日期有效
}
这是因为“12”。
在将字符串解析为数字时被解释为12
(这发生在日期对象的内部)。试试这个:
if(isValidDate(a[0],a[1]-1,a[2]) == false && iDate.indexOf('.') == -1){
基本上,只需检查点。这是因为在将字符串解析为数字时,被解释为12
(这发生在日期对象的内部)。试试这个:
if(isValidDate(a[0],a[1]-1,a[2]) == false && iDate.indexOf('.') == -1){
基本上,只需检查点。如评论中所述,以下是解决方案:
isValidDate = function(day,month,year) {
var dteDate;
dteDate=new Date(year,month,day);
return ((day.toString()===dteDate.getDate().toString()) && (month.toString()===dteDate.getMonth().toString()) && (year.toString()===dteDate.getFullYear().toString()));
}
您还需要toString()方法,就像比较
“12”
和12
一样,它不会相等。现在,您将比较“12”
和“12”
,它们在有效日期上相等。如评论中所述,以下是解决方案:
isValidDate = function(day,month,year) {
var dteDate;
dteDate=new Date(year,month,day);
return ((day.toString()===dteDate.getDate().toString()) && (month.toString()===dteDate.getMonth().toString()) && (year.toString()===dteDate.getFullYear().toString()));
}
您还需要toString()方法,就像比较“12”
和12
一样,它不会相等。现在,您将比较“12”
和“12”
,它们在有效日期上相等
function isValidDate(dateString)
{
if(! dateString.match(/((1[0-2])|(0?\d))\/(([0-2]?\d)|(3[0-1]))/(\d\d)?\d\d/) )
return false;
var parts = dateString.split("/");
var dateToCheck = new Date(parts[0],parts[1]-1,parts[2]);
return ((parts[0]==dateToCheck.getDate()) && (parts[1]==dateToCheck.getMonth()+1) && (parts[2]==dateToCheck.getFullYear()));
}
function isValidDate(dateString)
{
if(! dateString.match(/((1[0-2])|(0?\d))\/(([0-2]?\d)|(3[0-1]))/(\d\d)?\d\d/) )
return false;
var parts = dateString.split("/");
var dateToCheck = new Date(parts[0],parts[1]-1,parts[2]);
return ((parts[0]==dateToCheck.getDate()) && (parts[1]==dateToCheck.getMonth()+1) && (parts[2]==dateToCheck.getFullYear()));
}
这是我的日期验证版本。它不允许输入错误的日期,即使有人打算输入。这也将在月和日之后自动填充
$("#date").keyup(function (e) {
// validation for length max 10
var temp = $(this).val();
if (temp.length > 10) $(this).val(temp.substring(0, temp.length - 1));
var key = String.fromCharCode(e.keyCode);
console.log(key + " " + e.keyCode);
var regex = /[0-9]|[a-i]|\/|\`|\o|\¿|\%|\'|\$/;
// checking teh allowed character
if (!regex.test(key)) {
// checking backspace and shift key ( need to allow)
if (e.keyCode != 8 && e.keyCode != 16) {
var tam = $(this).val().length;
$(this).val(temp.substring(0, tam - 1));
}
}
else {
//if its not backslash
if (e.keyCode != 191 && e.keyCode != 111) {
if ($(this).val().length == 2) {
$(this).val($(this).val() + "/");
} else if ($(this).val().length == 5) {
$(this).val($(this).val() + "/");
}
}
else {
// if backslash
if ($(this).val().length != 3 && $(this).val().length != 6) {
var tam = $(this).val().length;
$(this).val(temp.substring(0, tam - 1));
}
}
}
});
这是我的日期验证版本。它不允许输入错误的日期,即使有人打算输入。这也将在月和日之后自动填充
$("#date").keyup(function (e) {
// validation for length max 10
var temp = $(this).val();
if (temp.length > 10) $(this).val(temp.substring(0, temp.length - 1));
var key = String.fromCharCode(e.keyCode);
console.log(key + " " + e.keyCode);
var regex = /[0-9]|[a-i]|\/|\`|\o|\¿|\%|\'|\$/;
// checking teh allowed character
if (!regex.test(key)) {
// checking backspace and shift key ( need to allow)
if (e.keyCode != 8 && e.keyCode != 16) {
var tam = $(this).val().length;
$(this).val(temp.substring(0, tam - 1));
}
}
else {
//if its not backslash
if (e.keyCode != 191 && e.keyCode != 111) {
if ($(this).val().length == 2) {
$(this).val($(this).val() + "/");
} else if ($(this).val().length == 5) {
$(this).val($(this).val() + "/");
}
}
else {
// if backslash
if ($(this).val().length != 3 && $(this).val().length != 6) {
var tam = $(this).val().length;
$(this).val(temp.substring(0, tam - 1));
}
}
}
});
好吧,我得说12。JavaScript将其解释为12,因此它比较12和12,但1.2与12不相等(它将它们作为整数进行比较)。我要说做一个.toString()并比较字符串。这只是我的猜测:)或者尝试使用三个相等(==)来进行严格的比较。那么存储在dteDate上的结果日期是正确的吗?或者只是一个有效的日期?-1是正确的,在本例中,对于几个月,JavaScript从0@jValdron谢谢,伙计,我只是问问而已!奇怪的事情发生在201年10月12日。如果你在这个月做了类似的事情,也会被通过@Deleteman结果日期是它接受的任何日期,因此它将接受12./10/201,例如,我认为是12。JavaScript将其解释为12,因此它比较12和12,但1.2与12不相等(它将它们作为整数进行比较)。我要说做一个.toString()并比较字符串。这只是我的猜测:)或者尝试使用三个相等(==)来进行严格的比较。那么存储在dteDate上的结果日期是正确的吗?或者只是一个有效的日期?-1是正确的,在本例中,对于几个月,JavaScript从0@jValdron谢谢,伙计,我只是问问而已!奇怪的事情发生在201年10月12日。如果你在这个月做了类似的事情,也会被通过@Deleteman结果日期是它接受的任何日期,因此它将接受12./10/201,例如。答案是好的。然而,最好是