2013-03-09 77 views
0

我想在Javascript中使用與m/dd/yy-m/dd/yy格式匹配的正則表達式(因此它應該看起來像4/11/12-5/12/13)。我已經測試了我的第一部分,似乎是炒作,但我似乎無法超越第一部分。這裏是我有什麼(它會爲4/11/12工作,但不是-5/12/12正則表達式日期格式m/dd/yy-m/dd/yy

var myDateRE = /^((0?[13578]|10|12)(-|\/)(([1-9])|(0[1-9])|([12])([0-9]?)|(3[01]?))(-|\/)((19)([2-9])(\d{1})|(20)([01])(\d{1})|([8901])(\d{1}))|(0?[2469]|11)(-|\/)(([1-9])|(0[1-9])|([12])([0-9]?)|(3[0]?))(-|\/)((19)([2-9])(\d{1})|(20)([01])(\d{1})|([8901])(\d{1})))[-]$/ ; 
+6

聖意大利麪,蝙蝠俠! '.split(' - ')'字符串並分別測試每個半部分會不會更容易? – JJJ 2013-03-09 21:26:41

+0

@Juhana - 打敗我吧!比正則表達式瘋狂更容易的方法 – levelnis 2013-03-09 21:27:35

回答

0

此找到自己的子

1?\d\/[01]\d\/\d{2}-1?\d\/[01]\d\/\d{2}/ 

您可以添加一些括號來確定每個值

/(1?\d)\/([01]\d)\/(\d{2})-(1?\d)\/([01]\d)\/(\d{2})/.exec('4/11/12-5/12/13') 

輸出

["4/11/12-5/12/13", "4", "11", "12", "5", "12", "13"] 
0

我的建議

DEMO

var re = /^\d{1,2}\/\d{1,2}\/\d{1,2}-\d{1,2}\/\d{1,2}\/\d{1,2}$/ 
var str = "4/11/12-5/12/13" 

function testDate(str) { 
    var parts = str.split("/"); 
    var date = new Date(str); 
    return parts[0] == date.getMonth()+1 && 
     parts[1] == date.getDate() && 
     parts[2] == String(date.getFullYear()).substring(2); 
} 

if (str.match(re)) { 
    alert(testDate(str.split("-")[0])); 
    alert(testDate(str.split("-")[1])); 
}