Javascript日期验证-年份和句号
检查字段:Javascript日期验证-年份和句号,javascript,validation,date,Javascript,Validation,Date,检查字段: checkFields = function() { var colCheck = 0; var colArray = []; var colDupArray = []; var iDate = $("check_date").value; if(iDate.length > 0) { var a = iDate.split("/"); if(isValidDate(a[0],a[1]-1,a[2]) == false){ al
checkFields = function() {
var colCheck = 0;
var colArray = [];
var colDupArray = [];
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. Please amend!");
return false;
}
验证:
isValidDate = function(day,month,year) {
var dteDate;
dteDate=new Date(year,month,day);
var day = dteDate.getDate();
var month = dteDate.getMonth() + 1;
var year = dteDate.getFullYear();
var formatted =
(day < 10 ? "0" : "") + day + "/" +
(month < 10 ? "0" : "") + month + "/" +
year;
return
+day === dteDate.getDate() &&
+month === dteDate.getMonth() &&
+year === dteDate.getFullYear();
}
isValidDate=函数(日、月、年){
var dteDate;
dteDate=新日期(年、月、日);
var day=dteDate.getDate();
var month=dteDate.getMonth()+1;
var year=dteDate.getFullYear();
变量格式化=
(天<10?“0”:“)+天+”/“+
(月数<10?“0”:“)+月数+”/“+
年份;
返回
+日期===dteDate.getDate()&&
+月份===dteDate.getMonth()&&
+年份===dteDate.getFullYear();
}
问题是,我的代码接受的日期是“03.06.2012”,而我只希望它接受数字之间的斜杠
当我只想要一个四位数的年份时,它也接受“03/06/12”
有什么想法吗?至少对于四位数年份问题,请查看输出和代码:
d1 = new Date(1,2,3);
d2 = d1.getFullYear();
d3 = d1.getMonth();
d4 = d1.getDay();
alert(d2);
alert(d3);
alert(d4);
日期构造函数对于四年数字并不严格(不管Mozilla怎么说)。在上面的例子中,它甚至将int 1作为一年!这反映在您的程序中,接受长度不超过4个字符的年份
也许可以测试一年字符串的长度
至于拆分,也许您可以使用一个正则表达式来拆分并确保只接受斜杠(如建议的)?至少对于四位数年份问题,请查看输出和代码:
d1 = new Date(1,2,3);
d2 = d1.getFullYear();
d3 = d1.getMonth();
d4 = d1.getDay();
alert(d2);
alert(d3);
alert(d4);
日期构造函数对于四年数字并不严格(不管Mozilla怎么说)。在上面的例子中,它甚至将int 1作为一年!这反映在您的程序中,接受长度不超过4个字符的年份
也许可以测试一年字符串的长度
至于拆分,也许您可以使用一个正则表达式来拆分并确保您只接受斜杠(如建议的)?如建议的,让用户以选择的格式输入日期。输出应该与您预期的一样 我用一个
Date.prototype.formatDateField
和一个名为的库扩展了我的小演示,这个库看起来也很干净。第三个选项是jqueryui$.datepicker.formatDate()
不过,这并不是绝对可靠的,也许你应该找一个可以为你处理格式的日期选择器。你的问题的最佳解决方案是什么
但是,如果您想自定义,这可能会让您开始:
// prototype
Date.prototype.formatDateField = function (options) {
var i = 0,
date = [],
len = date.push(this.getDate(), this.getMonth() + 1, this.getFullYear());
for (; i < len; i += 1) {
var chunk = date[i];
date[i] = chunk < 10 ? options.pad + chunk : chunk;
}
return date.join(options.separator);
};
// Setup output
var cfg = {
fieldDate: "#fieldDate",
options: {
pad: "0",
format: "dd/MM/yyyy",
separator: "/"
}
};
// function to call
function reformatInput(){
$(cfg.date).blur(function(){
var moment = moment(this.value).calendar(cfg.options2.format),
prot = new Date(this.value).formatDateField(cfg.options2),
jqueryui = $.datepicker.formatDate(cfg.options2.format, new Date(this.value));
$(cfg.fieldDate1).val(moment);
$(cfg.fieldDate2).val(prot);
$(cfg.fieldDate3).val(jqueryui);
});
}
// run on demand
reformatInput();
//原型
Date.prototype.formatDateField=函数(选项){
var i=0,
日期=[],
len=date.push(this.getDate(),this.getMonth()+1,this.getFullYear());
对于(;i
演示:根据建议,让用户以选择的格式输入日期。输出应该与您预期的一样 我用一个
Date.prototype.formatDateField
和一个名为的库扩展了我的小演示,这个库看起来也很干净。第三个选项是jqueryui$.datepicker.formatDate()
不过,这并不是绝对可靠的,也许你应该找一个可以为你处理格式的日期选择器。你的问题的最佳解决方案是什么
但是,如果您想自定义,这可能会让您开始:
// prototype
Date.prototype.formatDateField = function (options) {
var i = 0,
date = [],
len = date.push(this.getDate(), this.getMonth() + 1, this.getFullYear());
for (; i < len; i += 1) {
var chunk = date[i];
date[i] = chunk < 10 ? options.pad + chunk : chunk;
}
return date.join(options.separator);
};
// Setup output
var cfg = {
fieldDate: "#fieldDate",
options: {
pad: "0",
format: "dd/MM/yyyy",
separator: "/"
}
};
// function to call
function reformatInput(){
$(cfg.date).blur(function(){
var moment = moment(this.value).calendar(cfg.options2.format),
prot = new Date(this.value).formatDateField(cfg.options2),
jqueryui = $.datepicker.formatDate(cfg.options2.format, new Date(this.value));
$(cfg.fieldDate1).val(moment);
$(cfg.fieldDate2).val(prot);
$(cfg.fieldDate3).val(jqueryui);
});
}
// run on demand
reformatInput();
//原型
Date.prototype.formatDateField=函数(选项){
var i=0,
日期=[],
len=date.push(this.getDate(),this.getMonth()+1,this.getFullYear());
对于(;i
演示:您以某种方式将格式设置与验证功能混合在一起。应该是这样的:
function isValidDate(day,month,year) {
var dteDate = new Date(year,month,day);
return +day === dteDate.getDate()
&& +month === dteDate.getMonth()
&& +year === dteDate.getFullYear();
}
function formatDate(dteDate) {
var day = dteDate.getDate(),
month = dteDate.getMonth() + 1,
year = dteDate.getFullYear();
var formatted = (day < 10 ? "0" : "") + day + "/"
+ (month < 10 ? "0" : "") + month + "/"
+ year;
return formatted;
}
函数isValidDate(日、月、年){
var dteDate=新日期(年、月、日);
return+day==dteDate.getDate()
&&+month==dteDate.getMonth()
&&+year==dteDate.getFullYear();
}
函数格式化日期(dteDate){
var day=dteDate.getDate(),
month=dteDate.getMonth()+1,
year=dteDate.getFullYear();
var格式=(第10天?“0”:“)+day+“/”
+(月数<10?“0”:“)+月数+”/“
+年份;
返回格式;
}
您不知何故将格式化与验证功能混合在一起。应该是这样的:
function isValidDate(day,month,year) {
var dteDate = new Date(year,month,day);
return +day === dteDate.getDate()
&& +month === dteDate.getMonth()
&& +year === dteDate.getFullYear();
}
function formatDate(dteDate) {
var day = dteDate.getDate(),
month = dteDate.getMonth() + 1,
year = dteDate.getFullYear();
var formatted = (day < 10 ? "0" : "") + day + "/"
+ (month < 10 ? "0" : "") + month + "/"
+ year;
return formatted;
}
函数isValidDate(日、月、年){
var dteDate=新日期(年、月、日);
return+day==dteDate.getDate()
&&+month==dteDate.getMonth()
&&+year==dteDate.getFullYear();
}
函数格式化日期(dteDate){
var day=dteDate.getDate(),
month=dteDate.getMonth()+1,