2014-03-04 20 views
0

我試圖驗證格式mm/yyyy格式的月份年。請幫助我使用此日期格式的正則表達式。plaese建議我正常表達爲mm/yyyy格式

我已經試過了,/(0[1-9]|1\d|2\d|3[01])/(19|20)\d{2}$/

但我沒有得到正確的結果。

+1

'2 \ d | 3 [01]'??幾個月只能運行到'12',這看起來像你正在嘗試做某種形式的*日*驗證。 –

+0

爲什麼不在'/'處使用'split',然後檢查'mm'部分和'yyyy'部分。正則表達式似乎不適合這項工作。 – Xotic750

回答

0

您的表達式的初始部分(替換)看起來像一個(有缺陷的)驗證,而不是月份。

也許:

/^(0[1-9]|1[012])\/(19|20)\d{2}$/ 

Live Copy

這使得01通過09(交替的第一部分)和1011,並12(第二部分),那麼任何一年20或21世紀。注意錨的兩端,並在中間躲過/的反斜槓。

那些捕獲組似乎也有點奇怪。如果你只是爲了做分組,而不是捕獲組,使用非捕獲組:

/^(?:0[1-9]|1[012])\/(?:19|20)\d{2}$/ 

Live Copy

+0

感謝它的工作 – Sandip

+0

@Sandip:很好。 :-) –

+0

@Sandip:如果*回答了你的問題,那麼SO的工作方式就是通過點擊旁邊的複選標記來「接受」答案。 (但只有當它回答你的問題。)更多:http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

0

試試這個..

^(0[1-9]|1[012])\/(19[0-9][0-9]|2[0-9][0-9][0-9])$ 

將接受一個月的MM喜歡'03'不是'3'。

0

而不是一個正則表達式,類似這樣的東西可能更容易理解和可維護性(IMO)。

的Javascript

function isValidFormat(monthAndYear) { 
    var parts = monthAndYear.split('/'); 

    return parts.length === 2 && parseInt(parts[0], 10) === +(parts[0]) && 
       parts[0] >= 1 && parts[0] <= 12 && parseInt(parts[1], 10) === +(parts[1]); 
} 

var tests = [ 
    '', 
    ' ', 
    '01/2014', 
    '012013', 
    'mm/yyyy', 
    '01/yyyy', 
    'mm/2014']; 

tests.forEach(function (test) { 
    console.log(test, isValidFormat(test)) 
}); 

輸出

false 
    false 
01/2014 true 
012013 false 
mm/yyyy false 
01/yyyy false 
mm/2014 false 

jsFiddle

如果你想更嚴格,那麼你可以檢查各部分藏漢的長度。