2013-04-11 16 views
2

我正在尋找一些RegEx,用於InfoPath 2010中日期字段的自定義模式驗證。接受的日期格式是m/d/yyyy或mm/dd/yyyy。M/D/YYYY和MM/DD/YYYY(InfoPath)的RegEx日期驗證

嘗試1:(\d{1,2})/(\d{1,2})/(\d{4})

嘗試2:(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/((19|20)\d\d)

有更好的運氣嘗試1,並沒有太大的所有企圖2.

+0

所以,如果嘗試1工作,有什麼問題? – 2013-04-11 18:24:20

+0

如果你想驗證日期是一個現有的日期,只是一個正則表達式不是你要找的。 – djjeck 2013-04-11 18:26:34

+0

當我輸入1/1/2001時收到驗證錯誤。儘管目前的日期有效。不知道爲什麼1/1/2001失敗。 – manh2244 2013-04-11 18:27:24

回答

3

我一直有一些日期和時間驗證InfoPath 2010的問題和正則表達式模式匹配可能是一種有用的方法。用於驗證M/d/yyyy的(沒有在一個月迎合特定的日期,並允許「0」前綴月或日)基本正則表達式會像以下(未經測試):

(0?[1-9]|1[012])\/(0?[1-9]|[12][0-9]|3[01])\/\d{4} 

對於更復雜的東西你可以看看this SO answer

但是,在InfoPath中,顯示的日期格式可能與內部格式完全不同,並且正是您的正則表達式需要匹配的內部格式。如果您在窗體上放置一個計算字段並將其設置爲日期字段要驗證你會看到類似這樣的:

2013-05-08T12:13:14 

所以正則表達式(再次忽略每月特定日期),以驗證日期要求其中的組成部分爲:

\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01]) 

但是這與示例日期不匹配,因爲它沒有考慮「T」之後的時間部分。所以訣竅是使用一個表達式來僅對日期子字符串進行匹配,例如,在我的情況了以下工作:

not(xdUtil:Match(substring-before(dfs:dataFields/my:SharePointListItem_RW/my:DateCreated, "T"), "\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])")) 
0

我嘗試了以下內容和它的工作:

\d{4}-\d{1,2}-\d{1,2} 

正如David指出,一個比顯示,因爲當我試圖\d\d/\d\d/\d\d\d\d它沒的內部格式可能不同儘管迎合日期的顯示格式,它仍然行不通。

0

我有同樣的問題。

我用日期字段的規則到另一個隱藏的文本字段設置爲

string(datefield). 

總是出來YYYY-MM-DD這是不是太努力創造對一個正則表達式。我用這個。

((19|20)\d\d)-(0?[1-9]|1[012])-(0?[1-9]|[12][0-9]|3[01]) 

請記住它必須是一個XML Regex,它有一些限制。

然後我在隱藏字段上設置另一個規則來設置布爾IsDateValid。