使用正则表达式检查时间
Checking times with regular expressions
我有以下功能:
function calcTotal(event)
{var myId = event.currentTarget.id;
myId = myId.replace(/[^0-9]/g, '');
var timeRegex = /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/;
if($('#start'+myId).val().match(timeRegex) && $('#end'+myId).val().match(timeRegex) && $('#pause'+myId).val().match(timeRegex))
{ alert('win');
var minutes = 0;
var n = $('#end'+myId).val().split(':');
minutes = parseInt(n[0])*60 + parseInt(n[1]);
var n = $('#start'+myId).val().split(':');
minutes -= parseInt(n[0])*60 + parseInt(n[1]);
var n = $('#pause'+myId).val().split(':');
minutes -= parseInt(n[0])*60 + parseInt(n[1]);
var hours = Math.floor(minutes/60);
minutes = minutes % 60;
alert(hours + ':' + minutes);
$('#total' + myId).val(hours + ':' + minutes);
}
else
{ alert('fail');
$('#total' + myId).val('00:00');
}
}
</script>
让我们假设myID等于1,并假设以下值:
start1 = 00:00
end1 = 10:00
pause1 = 02:00
我想让这个函数将前三个值与正则表达式匹配,以确定它们是否是有效时间。之后,我想计算一下当天的总工作时间:end1-start1-ause1。由于某些原因,即使有这些正确的值,函数也不会进入if(…({alert('win'(…}。
我认为我的正则表达式有问题,但我已经检查了(stackoverflow问题(并使用了该正则表达式。
有人能告诉我我做错了什么吗?
整个代码:
<?php
if(isset($_POST['date']))
{ $sql = "INSERT INTO `hour_administration`.`hours` (`h_id`, `date`, `start`, `end`) VALUES";
foreach($_POST['date'] as $k => $v)
{
if(empty($_POST['date'][$k]))
break;
if($k > 0)
$sql .= ",";
$sql .= "(NULL, '".$_POST['date'][$k]."', '".$_POST['start_time'][$k].":00', '".$_POST ['end_time'][$k].":00')";
}
$sql .= ";";
echo " Query: ".$sql. "</BR>";
mysql_query($sql) or die('Could not query: ' . mysql_error());
}
if(isset($_POST['rows']))
{
$rows = $_POST['rows'];
}else
{
$rows = 5;
}
?>
<script>
$(document).ready(function() {
$( ".date" ).datepicker({ dateFormat: "yy-mm-dd" });
$(".time").mask("99:99");
$('.start_time').change(function(e) {
calcTotal(e);
});
$('.end_time').change(function(e) {
calcTotal(e);
});
$('.pause').change(function(e) {
calcTotal(e);
});
});
function calcTotal(event)
{ var myId = event.currentTarget.id;
myId = myId.replace(/[^0-9]/g, '');
var timeRegex = /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/;
if($('#start'+myId).val().match(timeRegex) && $('#end'+myId).val().match(timeRegex) && $('#pause'+myId).val().match(timeRegex))
{
var minutes = 0;
var n = $('#end'+myId).val().split(':');
minutes = parseInt(n[0])*60 + parseInt(n[1]);
var n = $('#start'+myId).val().split(':');
minutes -= parseInt(n[0])*60 + parseInt(n[1]);
var n = $('#pause'+myId).val().split(':');
minutes -= parseInt(n[0])*60 + parseInt(n[1]);
var hours = Math.floor(minutes/60);
minutes = minutes % 60;
alert(hours + ':' + minutes);
$('#total' + myId).val(hours + ':' + minutes);
}
else
{ alert($('#start'+myId).val());
$('#total' + myId).val('00:00');
}
}
</script>
<div class="inner_container">
<form name="input" method="POST" id="input">
<table border="1">
<tr>
<td>Date</td>
<td>Start time</td>
<td>End time</td>
<td>Pause</td>
<td>Total</td>
</tr>
<tr>
<?php for($i = 0;$i < $rows;$i++)
{?>
<td><input type="text" class="date" name="date[]" id="start<?php echo $i;?>"></td>
<td><input type="text" class="start_time time" name="start_time[]" id="start<?php echo $i;?>"></td>
<td><input type="text" class="end_time time" name="end_time[]" id="end<?php echo $i;?>" ></td>
<td><input type="text" class="pause time" name="pause[] " id="pause<?php echo $i;?>"></td>
<td><input type="text" class="total" name="total[]" id="total<?php echo $i;?>"></td>
</tr>
<?php }?>
</table>
<input type="submit" id="submit_inner_container"value="Submit">
</form>
<form name="amount" method="POST">
<label for="name">How many rows would you like?</label>
<input type="text" name="rows" size="3" id="rows" value="<?php echo $rows; ?>"/>
<input type="submit" value="Rows"
</form>
</div>
HTML显示您有两个具有相同id
属性的输入字段:
<td><input type="text" class="date" name="date[]" id="start<?php echo $i;?>"></td>
<td><input type="text" class="start_time time" name="start_time[]" id="start<?php echo $i;?>"></td>
这里的第一个应该用"日期"而不是"开始"吗?
var timeRegex = /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/;
timeRegex.test('00:00') // true
timeRegex.test('10:00') // true
timeRegex.test('02:00') // true
这意味着您的问题不在于regex,而且我认为if
语句没有问题。问题一定出在选择器或文本框中的值上。我会在val
中查找空白或其他字符。
正则表达式运行良好。
看到这个jsfiddle
var timeRegex = /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/;
var start = "00:00"
var end = "10:00"
var pause = "02:00"
if(start.match(timeRegex) && end.match(timeRegex) && pause.match(timeRegex))
{
alert('win');
}
else
{
alert('fail');
}
如果你想要更多的答案,请发布你的选择器正在访问的HTML代码
相关文章:
- Jquery如何检查今天的时间大于使用给定时间
- 指令加载真的很长,检查加载时间的方法
- 如何检查日期选择器和时间选择器元素是否使用JQuery/Javascript设置
- 有没有一种方法可以检查javascript以毫秒为单位执行一个函数需要多长时间
- 如果在线检查期间发生电源故障,我们如何更新用户再次登录门户时的剩余时间
- 检查JavaScript中的日期时间是否相等时出现错误结果
- 使用JS检查用户是否在EST时区和设置的EST时间范围内
- 读取一个txt文件并检查时间
- 正在检查Javascript中的干扰时间跨度
- 如何使用Moment.JS检查当前时间是否在2次之间
- 检查时间冲突,只想显示 1 个警告
- 检查是否在一定时间间隔内加载了多个图像;如果没有,则替换为其他 URL
- JavaScript 检查时间范围是否重叠
- 检查工作时间
- 用于检查时间格式的 JavaScript 正则表达式
- Javascript检查一段时间内是否没有发生某些事情
- jQuery - 检查当前日期和时间是否在所选日期和时间的 24 小时内
- Chrome扩展程序每隔一段时间检查来自服务器的数据
- 隔夜开放时间检查JS
- 时间检查:服务器端或客户端