我有这个我希望验证的asp网络文本框,以便用户可以输入美国时间或没有冒号,例如:" 10:00 PM"或" 1230 AM"因为我的代码背后要求它是一个有效的日期时间:" yyyy-mm-dd hh:mm"我需要在客户端进行格式化。我该怎么做?
ASPX:
<asp:TextBox Style="float: right;" Width="50" CssClass="TellusTextBox" ClientIDMode="Static" ID="txtArrivalTime" runat="server" />
<asp:TextBox Style="float: right;" Width="50" CssClass="TellusTextBox" ClientIDMode="Static" ID="txtDepartureTime" runat="server" />
JavaScript的:
function ValidateDateTime(value) {
//logic here
}
答案 0 :(得分:1)
<asp:TextBox Style="float: right;" Width="100" CssClass="TellusTextBox" ClientIDMode="Static" ID="txtArrivalTime" runat="server" type="time" placeholder="hrs:mins" value="" pattern="^([0-1]?[0-9]|2[0-4]):([0-5][0-9])(:[0-5][0-9])?$" required="required" />
答案 1 :(得分:0)
如果你的代码隐藏要求它是一个有效的DateTime,那么也要在服务器端验证它。 Javascript可以轻松关闭/绕过/操纵。这对提高可用性很有好处,但你不能相信它。如果您想确定它是正确的值,则代码隐藏必须在提交表单时再次执行验证。
ASP.NET Forms提供了Validator控件,它可以为您提供整齐的客户端和服务器端验证,而无需单独编写和维护这两段代码。
为此,您可以使用RegularExpressionValidator,它将使用正则表达式匹配字符串中的字符。这将匹配您在上面显示的两种12小时格式的时间,包括最后的AM / PM:
<asp:RegularExpressionValidator runat="server" ID="val_reg_ArrivalTime" ControlToValidate="txtArrivalTime" ValidationExpression="^(0[1-9]|1[0-2])(:){0,1}[0-5][0-9] (AM|PM)$" ErrorMessage="Time must be in this format: hh:mm AM/PM" CssClass="errormessage" SetFocusOnError="true" Display="Dynamic" />
或者,它可能更可靠,更清晰,更容易/更短的用户输入,接受24小时格式(即hh:mm)。将该正则表达式替换为24小时:
^([0-9]|(0|1)[0-9]|2[0-3]):[0-5][0-9]$
使用这两种方法,无需编写任何自定义.NET或JavaScript代码 - 验证控件会为您处理。
在此处了解有关可用验证控件的更多信息:https://msdn.microsoft.com/en-us/library/debza5t0.aspx N.B.对于将来的参考,还包括一个“自定义”验证器,用于何时标准控件不能满足您的需要。它为您提供了一个框架,您可以在其中插入自定义JS和C#代码,但它的处理方式与标准控件相同。