2015-11-30 45 views
0

我在尋找一個正則表達式來驗證以下格式AaaD-DDMMYY-HH-MM雖然下面的表達式適用於所有在線測試http://www.freeformatter.com/regex-tester.html它不起作用該應用程序的前端允許我們輸入預設的正則表達式。正則表達式來驗證日期和限制日期範圍的格式DDMMYY

我們試圖使用正則表達式來允許這些日期範圍010120至311299(1999年1月1日至1999年12月31日)。

請用正則表達式更好地協助

樣品輸入要匹配是AADD-111199-01-01

此輸入AADD-111100-01-01不應該匹配

^( ([A-ZA-Z] {4} - )+(0 [1-9] | 1 [0-9] | 2 [0-9] | 3 [0-1])+(0 [1-9 ] | 1 [0-2])+(([2-9] [1-9]) - )+(\ d {2} - )+(\ d {2}))$

我試圖更新正則表達式是用java編寫的

+0

什麼是你想要它匹配和不匹配的一些示例輸入?什麼是「AaaD」?月份的格式是字母(JAN,FEB,...,DEC)還是數字(01,02,...,12)?你是否想要說明月份有不同天數的事實?例如,如果9月31日通過正則表達式,你會關心嗎? – pzp

+0

你想匹配和不匹配的字符串的一些例子嗎? –

+0

aadd-111199-01-01 –

回答

0

這裏有一個稍微清理版本,雖然我不知道是否會解決您的正則表達式不是在你的應用程序的前端工作的問題:

^(([a-zA-Z]{4})-(0[1-9]|1[0-9]|2[0-9]|3[0-1])(0[1-9]|1[0-2])([2-9][1-9])-(\d{2})-(\d{2}))$ 

捕獲後,您應該不分配中繼器小組(每個小組後都有一個'+')。當你這樣做的時候,如果這個組的內容被重複,那麼只有最後一次迭代被反向引用捕獲(在你的字符串的情況下,我認爲重複是不太可能的,但是你認爲捕獲組需要存在「至少一次「,但由於捕獲組只捕獲它所包含的內容,它本身並不意味着需要量詞的字符或字符組)。如果需要,重複(例如'+'或'*'或{n})更有意義內部的捕獲組。

您也在捕獲組中使用了連字符,這是不可能的(?)您想要的內容,因爲它使反向引用內容的解析更具挑戰性。但除此之外,給定的RegEx與您的示例字符串與PCRE RegEx匹配。什麼是您的前端應用程序創建?它是否使用PCRE或其他RegEx口味(here是各種RegEx口味的良好參考)?如果您使用正則表達式執行大量工作,我也推薦RegEx Buddy工具。

此外,像@pzp提到的那樣,使用正則表達式來檢測每個月的正確日期數量具有挑戰性。如果您想要驗證給定的日期,那麼我會推薦一些圖書館在通過RegEx格式驗證後檢查日期。例如,如果您在應用程序的前端使用JavaScript,則可以查看Moment.jsDatejs

+0

前端應用程序是用java編寫的 –