回答
正則表達式不採用這樣的範圍。你會想要做的事,如:
if(year >= 2020)
presto
我是輕率,因爲你想使用正則表達式,你可以只使用一個直接的比較。如果你有一個字符串,首先將字符串轉換爲一個整數(如果你甚至需要用Python來完成)。否則,你會有一些難以維護的非常難看的正則表達式。
編輯:如果你在使用正則表達式(或三個)真正熱衷,你的問題可以分爲三個正則表達式:^20[2-9]\d$
,^2[1-9]\d\d$
,^[3-9]\d{3}$
爲四字年。你可以將它們組合成^(20[2-9]\d|2[1-9]\d\d|[3-9]\d{3})$
。
但是請注意,正則表達式是:a)醜得要命,和b)只接受年高達9999你可以明智地使用了+
的緩解這一點,所以像:
^(20[2-9]\d+|2[1-9]\d{2,}|[3-9]\d{3,})$
。 ..可以工作。
但我希望你會發現,只是做year >= 2020
是好多了。
編輯2:地獄,這正則表達式是錯誤的,近年來比9999更大您可能需要使用:
^(20[2-9]\d|2[1-9]\d{2}|[3-9]\d{3}|[1-9]\d{4,})$
和仍然如果你進入一個像今年03852
不起作用。
不確定關於python,但w.r.t.以正則表達式它不會像你想的那樣工作......範圍是針對單個字符的。因此,如果由於某種原因,你必須有一個正則表達式(即:某種正則表達式填充數據驗證引擎):
^20[2-9][0-9]|[2-9][1-9][0-9][0-9]$
從2020至2099年或2100-9999任何數字。
看不到這3000年如何(即將到來)。 –
你可以通過使用'\ d'作爲'[0-9]'的高爾夫球。 –
這裏是一個顯著較短的正則表達式,你想要做什麼:
^(?![01]|20[01])\d{4}$
驗證:
>>> regex = re.compile(r'^(?![01]|20[01])\d{4}$')
>>> all(regex.match(str(x)) if x >= 2020 else not regex.match(str(x)) for x in xrange(10000))
True
- 1. 從年初開始獲取年齡小於10歲的行
- 2. EasyAdmin Symfony日期從2012年開始,結束於2022年
- 3. 如何從2016年開始?
- 4. 五年經常性支付
- 5. JQuery Datepicker設置結束年比大於開始年
- 6. 從開始日期開始計算每年的節假日然後每年
- 7. 關於年齡驗證的Cookie法
- 8. 圖書館方法從開始年度開始經過的秒數
- 9. jQuery表單驗證驗證年齡
- 10. SQL從去年的同一天開始
- 11. PHP:從年齡開始計算生日
- 12. 每年從零開始的累積列
- 13. 驗證年齡字段
- 14. 年的PHP表單驗證
- 15. HTML/CSS年齡驗證
- 16. SQL年底開始打印
- 17. 經常用於驗證數值
- 18. 經常用於驗證名字
- 19. Django年度驗證在2017年返回「確保此值小於或等於2016年」
- 20. 驗證日期(年)使用敲除JS
- 21. 使用jquery驗證月份和年份
- 22. CakePHP的:驗證用戶超過13年
- 23. 使用DateTime驗證年份:: createFromFormat
- 24. 臨時禁用依賴驗證2017年
- 25. 如何在引導日期選擇器中僅顯示給定範圍(2010年至2020年)的年份?
- 26. 2007年和2013年用於Office Addin的常見安裝程序
- 27. 驗證豆,我開始使用Bean驗證異常消息
- 28. 如何在MySQL中存儲會計年度(如2017-2020)?
- 29. 的Visual Studio 2015年沒有進口的字體和顏色從2013年開始正常
- 30. 關於2011年開發經典ASP的建議
你的第二組只接受值20-99,你需要接受00-99 。例如3000. –
你的正則表達式只接受一個字符串:'「20-9920-99」'。在使用工具之前,請嘗試閱讀一下它:我認爲你沒有花太多時間學習。如果你這樣做了,你可能會得出這樣的結論:正則表達式不適合你的情況。 –
@BartKiers謝謝,在看完JLundberg評論後,我意識到自己的錯誤。我必須承認正則表達式不是我的特長,使用比較運算符有更好的方法來做這件事,但由於需求限制,我必須使用正則表達式。 – Ted