簡體   English   中英

格式為MM:SS:HH的正則表達式的時間限制

[英]time limit on regular expression in format MM:SS:HH

我需要以MM:SS:HH格式驗證用戶輸入的分鍾,秒鍾和百分之一。 但是,用戶的輸入不能超過10分鍾。 我不確定如何限制它,仍然保持例如01:01:01有效。

/ ^ [0-1] [0-0]:[0-5] [0-9]:[0-9] [0-9] $ /

這是我的表情,但是我的01:01:01示例無法正常工作。

簡要

我肯定會在:上分割時間字符串,然后測試每個部分。 那是最簡單的解決方案。 另外,您可以使用regex相對容易地做到這一點。


方法1-沒有正則表達式

 const str = ["00:00:00", "05:05:05", "10:00:00", "10:00:01", "10:59:59", "20:20:20"]; str.forEach(function(s) { var a = s.split(":").map(Number); if(a[0] < 10 || (a[0] === 10 && a[1] === 0 && a[2] === 0)) { console.log(`Valid: ${s}`); } else { console.log(`Invalid: ${s}`); } }); 

方法2-正則表達式

 const regex = /^(?:0\\d(?::[0-5]\\d){2}|10:00:00)$/; const str = ["00:00:00", "05:05:05", "10:00:00", "10:00:01", "10:59:59", "20:20:20"]; str.forEach(function(s) { if(regex.exec(s) !== null) { console.log(`Valid: ${s}`); } else { console.log(`Invalid: ${s}`); } }); 


說明

我將僅在方法2中解釋正則表達式,因為其余部分非常簡單。 但是,如果您需要其他任何部分的說明,請隨時提出!

  • ^在行首處聲明位置
  • (?:0\\d(?::[0-5]\\d){2}|10:00:00)匹配以下任意一個
    • 0\\d(?::[0-5]\\d){2}匹配以下內容
      • 0從字面上匹配
      • \\d匹配任何數字
      • (?::[0-5]\\d){2}精確匹配以下兩次
        • :從字面上匹配
        • [0-5]匹配一個介於05之間的數字
        • \\d匹配任何數字
    • 10:00:00從字面上進行匹配
  • $在行尾聲明位置

/(10:00:00|^0[0-9]:[0-5][0-9]:[0-5][0-9]$)/

['10:00:01', '10:00:00', '09:59:59', '05:05:05']
    .forEach(t => console.log(t.match(/(10:00:00|^0[0-9]:[0-5][0-9]:[0-5][0-9]$)/)))

您的正則表達式已關閉。 只需將您的正則表達式更改為:

/^(10:00:00|0[0-9]:[0-5][0-9]:[0-9][0-9])$/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM