2017-08-07 27 views
1

我有以下變量賦值驗證用戶輸入的時間在谷歌表

function onEdit(e) { 
    if (e.range.getColumn() == 3){ 
     var isValid = /^([0-1]?[0-9]|2[0-4]):([0-5][0-9])(:[0-5][0-9])?$/.test(e.value); 
    } 
} 

我試圖測試是否當一個人編輯在谷歌電子表格的第三列中的值,該值是否他們進入是帶AM或PM的HH:MM格式的有效時間。

我在互聯網上發現了上述情況,但我從未見過這種理解時間的方式。有人可以解釋我發生了什麼,或者將我鏈接到關於上述語法如何工作的文章?

的希望最終能夠做到這樣的事情:

function onEdit(e){ 
    if (the user edits manually edits a value in the third column){ 
     determine whether the value they entered is a valid time 
     if it is{ 
      let the change go through 
     } 
     if it is not{ 
      alert("Sorry your change can't go through"); 
     } 
    } 

} 

從我讀的警報已經在正確的語法

回答

3

什麼你找到被稱爲「正則表達式「(RegEx或RegExp),它是一種匹配字符串的語法,它非常強大且可能非常複雜。有很長的一本書專門針對RegEx,所以我會試着給你一個關於這個如何工作的簡要概述,而不會陷入許多具體的細節中,而這些細節需要完全解釋。

見正則表達式維基百科這裏: https://en.wikipedia.org/wiki/Regular_expression

參見在JavaScript這裏使用正則表達式文檔: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions

要清楚,在你的例子正則表達式的部分是語句:

/^([0-1]?[0-9]|2[0-4]):([0-5][0-9])(:[0-5][0-9])?$/ 

這是如何工作的快速總結如下:

  • 的斜槓(/)表示正則表達式
  • ^字符串
  • $字符串
  • 結束比賽的開始相匹配的起始端結束了嗎?意思是「可選地匹配」緊前面的組或字符
  • |表示「或」
  • 大括號()用於將一組匹配組合在一起
  • []指示要匹配的字符集。 [0-9] 將匹配從0到9之間的任意數字。
  • :是一個文字字符,它匹配:在有效時間的中間。

所以: - 代表小時

^([0-1]?[0-9]|2[0-4]):從字符串到第一個冒號,比賽0至19的啓動或20至24表示。在第一個[0-1]之後的問號使其成爲可選項,因此您可以在凌晨2:00或02:00之間匹配2:00

([0-5][0-9])(:[0-5][0-9])?$表示匹配分鐘數(00到59)加00到59),直到字符串的末尾。

包含^和$特殊字符可確保字符串中沒有額外的字符。

最後需要注意的是,由於RegEx語法可能相當複雜且難以閱讀,因此不要盲目信任您在網上找到的RegEx,以便做任何重要的事情。有許多糟糕的或建設不佳的RegEx,用於驗證等事情。一般來說,如果您遇到RegEx您無法理解,並且無法弄清楚它是如何工作的,最好找到您理解的另一個解決方案。