我目前正在编写一个 ASP.NET 应用程序(在 SharePoint 中),它需要对表单中的字段执行验证。我目前正在寻找验证日期和时间的方法,包括比较两个日期时间(小于/大于)和验证格式。
我最初查看了datejs,但自 2007 年以来一直没有更新。根据文档,最后一个版本似乎缺少两个函数 - isAfter 和 isBefore - 所以我将注意力转移到使用moment javascript library。
我目前有一个开始日期、开始时间、结束日期和结束时间文本字段 - 所有这些都是必需的,所以我没有开始日期时间和结束日期时间 - 用户输入输入。我还使用 jQuery Date Picker 和jquery-ui-timepicker-addon来选择日期和时间。
我遇到的一个问题是在时间字段中输入时间时,我可以输入以下内容:
11:90 - 这将调整为 11:59。
11:100 - 没有调整。
这是我将值输入自定义验证 javascript 函数以验证时间的地方。这是使用以下代码完成的:
function ValidateTimeFormat(objSource, objArgs) {
var strToCompare = objArgs.Value;
var timeFormat = 'HH:mm';
var expectedEndDateObj = moment(strToCompare, timeFormat);
objArgs.IsValid = expectedEndDateObj.isValid();
}
使用 ASP.NET 代码段:
<div class="label-div">
<asp:Label ID="StartTimeLabel" runat="server" Text="Actual Start Time:"></asp:Label>
<asp:RequiredFieldValidator ID="ActualStartTimeRequiredValidator"
runat="server"
ControlToValidate="StartTimeTextBox"
ErrorMessage="Actual start time is required field"
Display="Dynamic">*</asp:RequiredFieldValidator>
<asp:CustomValidator ID="ActualStartTimeCustomValidator"
runat="server"
ControlToValidate="StartTimeTextBox"
ErrorMessage="Actual start time format is not correct"
Display="Dynamic"
ClientValidationFunction="ValidateTimeFormat">*</asp:CustomValidator>
</div>
<asp:TextBox ID="StartTimeTextBox" runat="server" ></asp:TextBox></li>
根据momentjs(如果我删除jQuery Time Picker):
- 11:90 无效。
- 11:100 有效。
我还没有看到任何论坛或对 momentjs 的支持,所以我想我会在这里问。有无数种方法可以验证时间,包括在您自己的自定义验证例程中使用正则表达式 - 但我现在不想重新发明轮子。我想要一个很好的图书馆来做这件事。
只是引用 momentjs 文档进行验证isValid:
mainmoment()
函数非常灵活,在解析输入时会允许溢出。例如,moment("2012-01-40", "YYYY-MM-DD")
将日期值溢出到月份,使实际时刻为 2 月 9 日(1 月 31 天 + 2 月 9 天)。
这在获取一年中的第 150 天或一天中的第 500 分钟时很有用,但是,在尝试解析用户输入时可能会出现问题。
添加了 moment#isValid 以检查片刻的输入是否确实是有效日期。
鉴于该库是 Date 的包装器,我不确定这是javascript问题还是moment - 或者确实是我自己!
有什么想法吗?