[英]How does this time Regex Work?
我剛剛繼承了一個帶有許多客戶端驗證的項目。
在這里,我找到了一個正則表達式檢查器,正如預期的那樣,沒有任何評論。 我承認正則表達式絕對是我的失敗之處之一。 (使用Javascript!)
var myRegxp = /(([0]*[1-9]{1})|([1]{1}[0-2]{1}))(\/{1})((19[0-9]{2})|([2-9]{1}[0-9]{3}))$/;
if (!myRegxp.test(args.Value))
{//do fail stuff here};
從頁面的其余部分,我很確定應該檢查某種日期格式。 這會通過MM / YYYY嗎? 從一些早期測試來看,它幾乎可以做到。
如果此正則表達式與MM / YYYY不匹配,什么是最好的方法?
來自正則表達式大師的任何建議將不勝感激。
它應以MM / YYYY結尾(其中MM為1-12,而YYYY為1900-9999)
(匹配月份)
([0]*[1-9]{1})
zero or more occurences of '0', and one occurence of 1-9
Example match: 01
要么
([1]{1}[0-2]{1})
1 match of '1', 1 match of 0-2
Example match: 10
第二部分(年份),首先將“ /”與以下內容進行字面匹配:
(\/{1})
然后年份:
((19[0-9]{2})
One match of '/', 19 and two matches of 0-9 (looks like a year in the range 1900-1999)
Example match: 1900
要么
([2-9]{1}[0-9]{3})
1 match of 2-9 and thee matches of 0-9 (looks like a year in the range 2000-9999
Example match: 2000
簡化的RE:
var myRegExp = /^(0[1-9]|1[0-2])\/(19\d{2}|[2-9]\d{3})$/;
注意: \\d
是0-9
的字符類。 我刪除了用於分組的括號,因為myRegExp.test
中沒有使用這些括號。
將
[0]*
替換為
0?
因為它不應該匹配
將0000001/2010
,但是應該匹配
1/2010
。
[0]*
替換為0
因為它實際上應匹配01
而不是1
。 ^
和$
是錨點,導致其從開始到結束都匹配。 忽略這些內容時,此RE將匹配任何包含MM / YYYY的文本。
我同意-它以MM / yyyy格式檢查日期。
它允許每月任意數量的前導零。 它允許年份匹配19 xx
或其他任何以2
到9
含2
和9
之間的數字開頭的數字。 這表示該年份最多可允許9999 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.