我必须构建一个HTML表单,其中包含“小时”和“分钟”的“输入”文本字段 类似的东西:
姓名: [Foo]
姓: [酒吧]
任务: [垃圾邮件]
小时分钟: [00:15]< - 输入文字。
如何使用Javascript帮助/验证/强制用户以唯一允许的 HH:mm 格式编辑小时和分钟值? *
有效时间范围:从 00:00 到 23:59
*我不能使用Jquery,当然我会仔细检查提交的值服务器端
答案 0 :(得分:46)
使用以下正则表达式:
^([0-1]?[0-9]|2[0-4]):([0-5][0-9])(:[0-5][0-9])?$
或者手工,但我强烈建议RegExp :) 一个简单的例子:
<SCRIPT TYPE="text/JavaScript">
function validateHhMm(inputField) {
var isValid = /^([0-1]?[0-9]|2[0-4]):([0-5][0-9])(:[0-5][0-9])?$/.test(inputField.value);
if (isValid) {
inputField.style.backgroundColor = '#bfa';
} else {
inputField.style.backgroundColor = '#fba';
}
return isValid;
}
</SCRIPT>
<FORM METHOD="POST">
<input type="text" onchange="validateHhMm(this);" />
</FORM>
答案 1 :(得分:17)
第一个答案的RegExp与OP的查询不正确。
^([0-1]?[0-9]|2[0-4]):([0-5][0-9])(:[0-5][0-9])?$
应该是
^([0-1][0-9]|2[0-3]):([0-5][0-9])$
匹配00-19或20-23:00-59
OP要求在00:00 - 23:59范围内验证HH:MM
没有秒。 24:00不应该有效。输入小时和分钟的两位数。
答案 2 :(得分:6)
<HTML>
<Head>
<script language="javascript">
function validateTime(obj)
{
var timeValue = obj.value;
if(timeValue == "" || timeValue.indexOf(":")<0)
{
alert("Invalid Time format");
return false;
}
else
{
var sHours = timeValue.split(':')[0];
var sMinutes = timeValue.split(':')[1];
if(sHours == "" || isNaN(sHours) || parseInt(sHours)>23)
{
alert("Invalid Time format");
return false;
}
else if(parseInt(sHours) == 0)
sHours = "00";
else if (sHours <10)
sHours = "0"+sHours;
if(sMinutes == "" || isNaN(sMinutes) || parseInt(sMinutes)>59)
{
alert("Invalid Time format");
return false;
}
else if(parseInt(sMinutes) == 0)
sMinutes = "00";
else if (sMinutes <10)
sMinutes = "0"+sMinutes;
obj.value = sHours + ":" + sMinutes;
}
return true;
}
</script>
</Head>
<Body>
<input type="text" onblur="validateTime(this)">
</Body>
</HTML>
答案 3 :(得分:4)
使用moment.js的方式是:
const time = '23:59'
moment(time, 'HH:mm', true).isValid()
答案 4 :(得分:2)
怎么样
function validTime(inputStr) {
if (!inputStr || inputStr.length<1) {return false;}
var time = inputStr.split(':');
return time.length === 2
&& parseInt(time[0],10)>=0
&& parseInt(time[0],10)<=23
&& parseInt(time[1],10)>=0
&& parseInt(time[1],10)<=59;
}
答案 5 :(得分:2)
您可以使用此功能检查时间格式:
function validateTime (time) {
const timeReg = /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/
return time.match(timeReg)
}
如果您希望只有一小时和一分钟,请将timeReg
替换为:
const timeReg = /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/
这是日期格式:
function validateDate (date) {
try {
new Date(date).toISOString()
return true
} catch (e) {
return false
}
}
答案 6 :(得分:0)
您可以使用类似jQuery.maskedit
的内容