2013-07-22 38 views
4

我目前正在開發一個程序。我被指示使用正則表達式和jQuery來處理格式化日期輸入。有問題,我決定運行這個測試代碼:日期與RegExp不匹配,雖然格式正確

function formatDate() { 
    var regEx = /^(0[1-9]|1[012])[\/](0[1-9]|[12][0-9]|3[01])[\/](19|20)\d\d$/; 
    var test = "02/20/1901"; 
    var obj = $('.format'); 
    var febRexEx = /^(02)[\/](3[01])[\/](19|20)\d\d$/; 
    if (test == regEx) { 
     alert("Matches Regular Expression 1."); 
     if (test == febRexEx) { 
      alert("Bad date!\nMatches Regular Expression 2!"); 
     } else { 
      alert("Not a bad date.\nDoesn't match Regular Expression 2."); 
     } 
    } else { 
     alert("Bad date!\nDoesn't match Regular Expression 1!"); 
    } 
} 

我還是比較新的JavaScript,jQuery和正則表達式,所以我不理解爲什麼測試日期不匹配的第一個正則表達式。

任何想法將不勝感激!我的代碼格式化,但我要檢查正在格式化後的日期符合,這也正是該代碼的用武之地。

+1

'if(test == regEx){'將永遠失敗,因爲這兩件事情不可能相同。有關使用正則表達式的方法,請參閱表4.2:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions –

回答

4

不能直接比較正則表達式的字符串,使用類似match

function formatDate() { 
     var regEx = /^(0[1-9]|1[012])[\/](0[1-9]|[12][0-9]|3[01])[\/](19|20)\d\d$/; 
     var test = "02/20/1901"; 
     var obj = $('.format'); 
     var febRexEx = /^(02)[\/](3[01])[\/](19|20)\d\d$/; 
     if (test.match(regEx)) { 
      alert("Matches Regular Expression 1."); 
      if (test.match(febRexEx)) { 
       alert("Bad date!\nMatches Regular Expression 2!"); 
      } else { 
       alert("Not a bad date.\nDoesn't match Regular Expression 2."); 
      } 
     } else { 
      alert("Bad date!\nDoesn't match Regular Expression 1!"); 
     } 
    } 

FIDDLE

+0

完美運行。就像我說的,我仍然在學習如何使用正則表達式,所以我不知道那個。非常感謝! – Kendra