簡體   English   中英

這段時間正則表達式如何工作?

[英]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})$/;

注意: \\d0-9的字符類。 我刪除了用於分組的括號,因為myRegExp.test中沒有使用這些括號。 [0]*替換為 0? 因為它不應該匹配 0000001/2010 ,但是應該匹配 1/2010 [0]*替換為0因為它實際上應匹配01而不是1 ^$是錨點,導致其從開始到結束都匹配。 忽略這些內容時,此RE將匹配任何包含MM / YYYY的文本。

我同意-它以MM / yyyy格式檢查日期。

它允許每月任意數量的前導零。 它允許年份匹配19 xx或其他任何以2929之間的數字開頭的數字。 這表示該年份最多可允許9999 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM