2011-07-22 71 views
0

喜正則表達式我希望能夠設置正則表達式允許這樣匹配日期格式和URL

01/01/1900或70年1月1日被輸入的日期,我有以下但不知道如何使它在最後需要4或2。

^([1-9]|0[1-9]|1[012])[- /.]([1-9]|0[1-9]|[12][0-9]|3[01])[- /.][0-9]{4}$ 

另外一個我想知道是URL

這一個我不知道我怎麼做,以便它符合正確的URL的?

謝謝

+1

你在用什麼語言?有機會有一個正則表達式驗證庫,有這樣的常見情況。 –

+0

年份:'(\ d \ d | [12] \ d \ d \ d)'。對於網址:這很難,你真的想提前檢查嗎?爲什麼不讓下一個更高的協議處理URL的有效性。 –

+0

它用於c#類 – user710502

回答

1

這應該與我們的兩個四位數字:

\d{2}(\d{2})? 

您的全正則表達式將是這樣的:

^([1-9]|0[1-9]|1[012])[- /.]([1-9]|0[1-9]|[12][0-9]|3[01])[- /.]\d{2}(\d{2})?$ 

網址是很難測試。 http://localhost是一個有效的網址,所以它https://test.example.co.uk:443/index.ece?foo=bar。我會看的東西在你的語言測試這個你還是做一個非常簡單的測試是這樣的(你將不得不劃定取決於您使用正則表達式引擎的一些特殊字符):

^https?:// 
0

要修改你的正則表達式,這樣只有2個或4個數字結尾,你可以試試這個:

^([1-9]|0[1-9]|1[012])[- /.]([1-9]|0[1-9]|[12][0-9]|3[01])[- /.]([0-9]{4}|[0-9]{2})$ 

對於網址,你可以嘗試(從here):或者看一下this S.O. question

0
^([1-9]|0[1-9]|1[012])[- /.]([1-9]|0[1-9]|[12][0-9]|3[01])[- /.]([0-9]{4}|[0-9]{2})$ 
0

好,是([0-9]{4}|[0-9]{2})對你不夠好?也許你可以添加一些檢查,即四位數組中的前兩位數字是1920,但這取決於你的需要。

至於URL匹配外觀here。有很多測試。

0

您可以在最後使用另一個替代項來接受2或4(與對其他日期部件執行「或」選項的方式相同)。或者,您可以在最後一個位置需要2個數字,然後再有2個可選數字。除非需要捕獲單個部分(日,月,年),否則應該使用非捕獲括號,如(?:)(即.NET語法)。

最後,你應該考慮你試圖用這個來實現的驗證類型。執行格式可能會更好,而不必擔心像91/73/9004這樣的不良格式,因爲即使您擁有的格式仍然可以獲得無效日期,例如2011年2月31日。既然你可能需要進一步的驗證,爲什麼不簡化正則表達式就像^(?:\d{1,2}[-/.]){2}\d{2}(?:\d{2})?$

至於URLs,stackoverflow是關於這個重複的問題。