2014-09-23 38 views
0

十進制格式的用戶輸入時間。如何使用javascript驗證以十進制表示的時間?

  • 0.00 //Incorrect
  • 1.54 //Correct value
  • 1.60 //Incorrect value
  • 1.59 //correct value

我試圖做一個正則表達式的功能,但它顯示不正確的所有值爲

var regex = /^[0-9]\d*(((,?:[1-5]\d{3}){1})?(\.?:[0-9]\d{0,2})?)$/; 
if (args.Value != null || args.Value != "") { 
    if (regex.test(args.Value)) { 
     //Input is valid, check the number of decimal places 
     var twoDecimalPlaces = /\.\?:[1-5]\d{2}$/g; 
     var oneDecimalPlace = /\.\?:[0-9]\d{1}$/g; 
     var noDecimalPlacesWithDecimal = /\.\d{0}$/g; 

     if (args.Value.match(twoDecimalPlaces)) { 

      //all good, return as is 
      args.IsValid = true; 
      return; 
     } 
     if (args.Value.match(noDecimalPlacesWithDecimal)) { 
      //add two decimal places 
      args.Value = args.Value + '00'; 
      args.IsValid = true; 
      return; 
     } 
     if (args.Value.match(oneDecimalPlace)) { 
      //ad one decimal place 
      args.Value = args.Value + '0'; 
      args.IsValid = true; 
      return; 
     } 
     //else there is no decimal places and no decimal 
     args.Value = args.Value + ".00"; 
     args.IsValid = true; 
     return; 
    } else 
     args.IsValid = false; 
} else 
    args.IsValid = false; 
+0

你的正則表達式是複雜得多,你的測試用例會說明什麼?爲什麼一個正則表達式呢?在'.'上分割,檢查邊界,parseInt()並檢查數字範圍,如果需要的話,轉換爲字符串加'0'。 – 2014-09-23 15:21:42

+0

24小時格式或12小時? – 2014-09-23 15:22:35

回答

1

它可能更容易做了一些工作:

var time = (+args.Value).toFixed(2); // convert to float with 2 decimal places 
if (time === args.Value) { 
    // it's a valid number format 
    if (time !== 0.0 && time < 24) { 
     // the hours are valid 
     if (time % 1 < 0.6) { 
      // the minutes are valid 
     } 
    } 
} 

可以摺疊所有成一個漂亮的一行:

if (time === args.Value && time !== 0.0 && time < 24 && time % 1 < 0.6) { 
} 

,甚至一個布爾/三元

var valid = time === args.Value && time !== 0.0 && time < 24 && time % 1 < 0.6; 
alert(time === args.Value && time !== 0.0 && time < 24 && time % 1 < 0.6 ? 'valid' : 'invalid'); 
+0

嘿喬,你的解釋是相當好的。但我需要做的是,而不是60它的.60,因爲你採取了模塊,然後剩餘部分獲得。我調試和檢查不同的值,如0.25 0.89 0.66 0.59等格式。順便說一句,謝謝你的回覆 – 2014-09-24 09:10:42

+0

哦,這是個好主意 - 愚蠢的錯誤:)更新帖子以供其他人蔘考。很高興幫助你 – Joe 2014-09-24 09:11:44