2013-01-08 25 views
0

我有以下功能:使用正則表達式檢查時間

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> 

假設身份識別碼等於1,並且讓我們假設以下值:

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

'00:00'是不是一個有效的價值;你的意思是'「00:00」'? –

+0

我有一個文本框,在輸入00:00的文本框中,該值由$('#start'+ myId).val()'提取。你是這個意思嗎? –

回答

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> 

應該在這裏的第一個,而不是使用「開始」→「日期」?

+0

非常感謝!就是這樣,我甚至沒有看到。 –

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中的空格或其他字符。

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代碼,如果你想要更多的答案

+0

我發佈了整個文件,希望你能找到問題所在。 –