我一直在使用jQuery UI中的Datepicker插件。我希望能够验证它所附带的输入文本框当前是否具有有效日期。jquery datepicker:验证当前输入值?
例如:
如果有人决定如果电流输入值是一个有效的日期(这是不是在这种情况下),以输入02/30/2010
我希望能够以某种方式要求该插件。
有谁知道这可以做到吗?
我一直在使用jQuery UI中的Datepicker插件。我希望能够验证它所附带的输入文本框当前是否具有有效日期。jquery datepicker:验证当前输入值?
例如:
如果有人决定如果电流输入值是一个有效的日期(这是不是在这种情况下),以输入02/30/2010
我希望能够以某种方式要求该插件。
有谁知道这可以做到吗?
看看dateFormat和constrainInput datepicker的选项。 http://jqueryui.com/demos/datepicker/#option-dateFormat
我不使用constrainInput,因为我希望人们能够使用斜线或破折号作为分隔符。但是,我不明白如何使用它可以让我知道是否有人进入一天如2月30日 – user169867 2010-06-30 13:55:47
约束输入不能解决这个问题,它阻止我输入文本,不会阻止我输入“5” – 2013-04-18 11:26:30
@DannyTuppeny - 可能值得注意,而你提到的是正确的, constraintInput不会阻止将文本剪切并粘贴到输入中 – webaholik 2018-02-13 14:11:24
我在验证器中添加了“truedate”方法。我非常想知道这是谁的代码,但我不记得我在哪里找到它。
$.validator.addMethod("truedate", function (value) {
function GetFullYear(year) {
var twoDigitCutoffYear = 10 % 100;
var cutoffYearCentury = 10 - twoDigitCutoffYear;
return ((year > twoDigitCutoffYear) ? (cutoffYearCentury - 100 + year) : (cutoffYearCentury + year));
}
if (value == null || value == '')
return true;
var yearFirstExp = new RegExp("^\\s*((\\d{4})|(\\d{2}))([-/]|\\. ?)(\\d{1,2})\\4(\\d{1,2})\\.?\\s*$");
try {
m = value.match(yearFirstExp);
var day, month, year;
if (m != null && (m[2].length == 4)) {
day = m[6];
month = m[5];
year = (m[2].length == 4) ? m[2] : GetFullYear(parseInt(m[3]));
}
else {
var yearLastExp = new RegExp("^\\s*(\\d{1,2})([-/]|\\. ?)(\\d{1,2})(?:\\s|\\2)((\\d{4})|(\\d{2}))(?:\\s\u0433\\.)?\\s*$");
m = value.match(yearLastExp);
if (m == null) {
return null;
}
day = m[3];
month = m[1];
year = (m[5].length == 4) ? m[5] : GetFullYear(parseInt(m[6]));
}
month -= 1;
var date = new Date(year, month, day);
if (year < 100) {
date.setFullYear(year);
}
return (typeof (date) == "object" && year == date.getFullYear() && month == date.getMonth() && day == date.getDate()) ? date.valueOf() : null;
}
catch (err) {
return null;
}
}, "Please enter an actual date.");
$('form').validate({
rules: {
insurance_GL: "truedate",
},
messages: {
insurance_GL: "Insurance GL date is not valid",
}
});
编辑 我必须从这里得到它: Jquery datepicker: validate date mm/dd/yyyy
您可以通过只读取和设置日期格式的文本框,只要你喜欢解决问题。所以用户无法在文本框中输入任何内容,用户只能从日期选择器中选择正确的日期格式(您设置的)。请看下面的例子。
<p>Date: <input type="text" id="datepicker" size="30" readonly="readonly"/></p>
<script>
$(function() {
$("#datepicker").datepicker();
$("#datepicker").datepicker("option", "dateFormat",'yy-mm-dd');
});
</script>
这非常可用。有些用户宁愿输入他们的日期,也不愿意在日历上输入日期! – 2013-04-18 11:25:54
虽然这个问题是快两岁了,我最近处理了一个类似的解决方案,发现Globalize库是最好的办法。例如,假设你有一个连接了jQueryUI日期选择器的文本框。当焦点丢失在文本框上时,您可以使用Globalize来验证输入的日期。在这种情况下,文本框是空白,如果日期是无效或放在一个标准格式,如果日期是有效的:
$('#myDateTextBox').blur(function() {
var parsedDate = Globalize.parseDate($(this).val());
if (parsedDate == null) {
$(this).val('');
}
else {
$(this).val(Globalize.format(parsedDate, 'd'));
}
的Globalize
库允许你指定一个文化(使用请求的语言理想),所以用户可以以他们的文化格式输入日期。
我不认为各种文化的dateFormats甚至可以匹配Globalize和jQueryUi DatePicker。在globalize.culture.fr-CA.js中,我看到这样的日期格式:yyyy-MM-dd。在datepicker-fr-CA.js中,我看到这样的日期格式:yy-mm-dd。我不认为这两个日期格式标记是相同的。大写字母“M”与小写字母“m”是如何解释的? – ClearCloud8 2014-02-04 23:59:48
@ ClearCloud8我编写了一个实用程序来生成jQueryUI datepicker本地化文件,以便它们与Globalize中使用的格式相匹配。 – 2014-02-05 14:25:47
啊好的,这是有道理的。好主意。 :)它仍然让我发疯,为什么日期格式标记会被解释不一致。我知道momentJs期望大写MM,而jqueryUI Datepicker期望小写mm。拥有一致的方法会很好......或者至少有一些资源可以将不同软件中的令牌进行比较,并显示出等值。 – ClearCloud8 2014-02-05 16:47:59
可以使用JS Date
来验证日期字符串。
var myDate = new Date(userInputString);
if (myDate == "Invalid Date"){
// user input is invalid
}
另请注意,即使对于无效日期,(myDate === "Invalid Date")
也会返回false。使用==工作正常,但检查的正确方法是(isNaN(d.getTime()))
这很容易
let value = $(this).val();
let format = $(this).datepicker('option', 'dateFormat');
let valueIsValid = false;
try {
$.datepicker.parseDate(format, value);
valueIsValid = true;
}
catch (e) {}
今天我有完全相同的问题
。每次我尝试使用它时,我都非常惊讶于jQuery UI中的所有内容都不完整和不完整。多么可笑。 :( – 2013-04-18 11:24:40