我有以下功能:
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,并且let假设以下值:
start1 = 00:00
end1 = 10:00
pause1 = 02:00
我希望此函数将前三个值与正则表达式匹配,以确定它们是否为有效时间。 之后我想计算当天的总工作时间:end1-start1-pause1。 由于某些原因,即使使用这些正确的值,函数nevers也会输入if(....){alert('win')...}。
我认为我的正则表达式有问题,但我已经检查过(stackoverflow question)并使用了该正则表达式。
有人能告诉我我做错了吗?
整个代码:
<?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>
答案 0 :(得分:1)
您的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>
这里的第一个是否应该使用“date”而不是“start”?
答案 1 :(得分:0)
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
意味着您的问题不在于正则表达式,我没有看到if
语句的问题。问题必须是选择器或文本框中的值。我会在val
中查找空格或其他字符。
答案 2 :(得分:0)
正则表达式工作正常。
请参阅此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代码