我試圖驗證格式mm/yyyy
格式的月份年。請幫助我使用此日期格式的正則表達式。plaese建議我正常表達爲mm/yyyy格式
我已經試過了,/(0[1-9]|1\d|2\d|3[01])/(19|20)\d{2}$/
但我沒有得到正確的結果。
我試圖驗證格式mm/yyyy
格式的月份年。請幫助我使用此日期格式的正則表達式。plaese建議我正常表達爲mm/yyyy格式
我已經試過了,/(0[1-9]|1\d|2\d|3[01])/(19|20)\d{2}$/
但我沒有得到正確的結果。
您的表達式的初始部分(替換)看起來像一個(有缺陷的)日驗證,而不是月份。
也許:
/^(0[1-9]|1[012])\/(19|20)\d{2}$/
這使得01
通過09
(交替的第一部分)和10
,11
,並12
(第二部分),那麼任何一年20或21世紀。注意錨的兩端,並在中間躲過/
的反斜槓。
那些捕獲組似乎也有點奇怪。如果你只是爲了做分組,而不是捕獲組,使用非捕獲組:
/^(?:0[1-9]|1[012])\/(?:19|20)\d{2}$/
感謝它的工作 – Sandip
@Sandip:很好。 :-) –
@Sandip:如果*回答了你的問題,那麼SO的工作方式就是通過點擊旁邊的複選標記來「接受」答案。 (但只有當它回答你的問題。)更多:http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –
試試這個..
^(0[1-9]|1[012])\/(19[0-9][0-9]|2[0-9][0-9][0-9])$
將接受一個月的MM喜歡'03'不是'3'。
而不是一個正則表達式,類似這樣的東西可能更容易理解和可維護性(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
如果你想更嚴格,那麼你可以檢查各部分藏漢的長度。
'2 \ d | 3 [01]'??幾個月只能運行到'12',這看起來像你正在嘗試做某種形式的*日*驗證。 –
爲什麼不在'/'處使用'split',然後檢查'mm'部分和'yyyy'部分。正則表達式似乎不適合這項工作。 – Xotic750