2011-02-12 86 views
2

我有一個接受時間(最多隻有5個字符)的文本框和一個接受am或pm值的下拉列表。字符串時間驗證(在javascript中)

我需要執行一些驗證用於諸如輸入到文本框中的字符串值:

  1. 如果用戶輸入9 =>應改爲0900
  2. 9:3 => 0930
  3. 09:3 => 0930
  4. 93 =>警報('無效時間值)
  5. 115 => 0115
  6. 12 => 1200
  7. 無效條目如!@#$%^ & *()<>?/〜`,;'「[] _- abcdefg .. => alert('Invalid Time Value')應該顯示。

到目前爲止,我所取得的所有成果都取代了:與''。 例如,如果用戶輸入09:00 => 0900

我需要類似:

如果CLKS是1位,然後rightpad CLKS與2零。

如果2位:CLKS> 12,則警報(無效小時值)

如果3位:CLKS <(%59)(即檢查最後2個字符),然後用1零 或CLKS leftpad> (%59),然後警報('無效分鐘值')

如果4位:clks> 12%(檢查前2個字符),警報('無效小時值') 或(clks> 12%和clks> 59%),然後警報('無效的時鐘時間') 或(clks < 12%)和(clks < 59%),然後按原樣接受該號碼。

如果5位(且都是數字),然後警報(「無效CLK時間」)

這些驗證需要進行腳本標籤內完成。 (我已經使用的後端語言是JSP)。

請幫助我:(

下面是代碼的一部分,我已經寫了:

<script type='text/javascript'> 
function clocks(){ 

    var clk = document.getElementById('TIME').value; 
    var clks = clk.replace('/:/g',''); 
    var ampm = document.getElementById('AMPM').value; 
    var add = 1200; 

    if (clks=="") 
    { 
     alert("You must enter clock time"); 
    } 
    else 
    { 
     if (ampm=='p') 
     { 
      clks=parseFloat(clks) + parseFloat(add); 
     } 
    } 

} 
.... 
</script> 
+2

9:3 => 0930,09:3 => 0930和93 => 0930出現模棱兩可的最好的。你是否需要接受這些投入?如果沒有,我只是將這些標記標記爲無效。 – deceze 2011-02-12 04:42:02

+0

@ deceze:是的deceze.It也必須爲這3個條目工作。這是要求的一部分。 – uno 2011-02-12 04:45:21

回答

0

這裏有一種方法可以做到它的功能:

function validate_time(clks) { 

    // Remove any non-digit characters 
    clks = clks.toString().replace(/\D/g, ''); 
    var is_valid = false; 

    switch (clks.length) { 

     case 1: 

      // This will run if the length is 1 digit. 
      clks = clks + '00'; 

      // Mark this as a valid time. 
      is_valid = true; 

      // stop running the rest 
      break; 

     case 2: 

      if (parseInt(clks) > 12) { 
       alert("Invalid hours value"); 
      } else { 
       is_valid = true; 
      } 

      break; 

     case 3: 

      // Get last two characters 
      var mins = clks.substr(1,2); // offset 1 character, length of 2 characters 

      if (parseInt(mins) <= 59) { 
       clks = '0' + clks; 
       is_valid = true; 
      } else { 
       alert('Invalid minutes value'); 
      } 

      break; 

     case 4: 

      var hours = clks.substr(0,2); 
      var mins = clks.substr(2,2); 

      if (parseInt(hours) > 12 || parseInt(mins) > 59) { 
       alert('Invalid clock time'); 
      } else { 
       is_valid = true; 
      } 

      break; 

     case 5: 

      alert("Invalid clock time"); 
      break; 

    } 

    var data = { clks: clks, is_valid: is_valid }; 

    return data; 

} 

調用它,你會做:

var result = validate_time(clks); 

並且您的結果將成爲傳回的對象... result.clks是填充的時間,result.is_valid將是輸入時間是否有效的真或假值。

0

function validateTimeNew(obj) { 

     var timeValue = obj.value; 
     if (timeValue == "" || timeValue.indexOf(":") < 0) { 
      alert("Invalid Time format.Valid Format Example 01:56:00 or 23:06:00"); 
      return false; 
     } 
     else { 
      var sHrs = timeValue.split(':')[0]; 
      var smin = timeValue.split(':')[1]; 
      smin = smin.substring(0, 2); 
      var sAmnPm = timeValue.split(' ')[1] || timeValue.split(':')[2]; 
      if (!isNaN(sAmnPm)) 
      { 
       sAmnPm = sAmnPm.toUpperCase(); 
      } 
      var chkAmnPm =timeValue.split(':')[1];    
      if (chkAmnPm.length == 4) 
       sAmnPm = chkAmnPm.substring(2, 4); 
       sAmnPm = sAmnPm.toUpperCase();    
      if (sHrs == "" || isNaN(sHrs) || parseInt(sHrs) > 23) { 
       alert("Invalid Time format Hours : "+ sHrs); 
       return false; 
      } 
      else if (parseInt(sHrs) == 0) { 
       sHrs = "00"; 
       sAmnPm = "AM"; 
      } 
      else if (sHrs < 10) 
      { 
       sHrs = "0" + parseInt(sHrs); 
       if (sAmnPm != "PM") 
       sAmnPm = "AM"; 
      } 
      else if (sHrs > 13) { 
       sHrs = parseInt(sHrs) - 12; 
       if (sHrs < 10) 
        sHrs = "0" + parseInt(sHrs); 
        sAmnPm = "PM"; 
      } 
      else if (sHrs == 10) 
      { 
       sHrs = parseInt(sHrs);     
       if (sAmnPm != "PM") 
       sAmnPm = "AM";          
      } 
      if (smin == "" || isNaN(smin) || parseInt(smin) > 59) { 
       alert("Invalid Time format Minutes :" + smin); 
       return false; 
      } 
      else if (parseInt(smin) == 0) 
       smin = "00"; 
      else if (smin < 10) 
       smin = "0" + parseInt(smin); 
      if (sAmnPm == "" || sAmnPm=="undefined") 
      { 
       sAmnPm = "AM" 
      } 
      else { sAmnPm = sAmnPm.toUpperCase(); } 
      obj.value = sHrs + ":" + smin + ":" + sAmnPm; 
     } 
    }