簡體   English   中英

使用相同模式驗證正則表達式中的多個日期

[英]Validate multiple dates in regular expression with the same pattern

我想驗證兩個日期字段,格式為“ dd / mm / yyyy”。 但是第二個日期的驗證始終為假。

var pattern = /\d{2}\/\d{2}\/\d{4}/gi;

if (pattern.test(date1) && pattern.test(date2)) {
       //Do something
   } 

我在Chrome控制台中嘗試過,這些是結果。 為什么未正確驗證?

var pattern= /\d{2}\/\d{2}\/\d{4}/gi
pattern.test("21/12/2008");
true
pattern.test("21/12/2009");
false
pattern.test("21/12/2008");
true
pattern.test("21/12/2009");
false

如果你希望你的字符串只有一個日期:

var pattern = /^\\d{2}\\/\\d{2}\\/\\d{4}$/;

如果您希望字符串包含日期:

var pattern = /\\d{2}\\/\\d{2}\\/\\d{4}/;


什么不起作用:

i不區分大小寫,搜索帶數字和/ s的日期時毫無意義

g表示全局,這對我們的正則表達式具有有趣的含義...

嘗試在控制台中運行此示例:

var pattern = /\d{2}\/\d{2}\/\d{4}/gi;
pattern.test("21/12/2009");
true
pattern.test("21/12/2008");
false
pattern.test("21/12/2008");
true
pattern.test("21/12/2009");
false
pattern.test("21/12/2009");
true
pattern.test("21/12/2009");
false

請注意,與發送給測試的內容無關,它只是觸發器true-false。

這是因為使用g標志時javascript正則表達式引擎不純。 它保持測試狀態。 從這個問題: 有趣的Javascript RegExp測試

在JS RegExp上使用全局標志時,“ test”和“ exec”方法在第一個匹配項處均會停止,但保留指向它們停止在字符串中搜索的位置的指針。 可以在lastIndex屬性上檢查該指針。 當您再次調用“ test”或“ exec”時,它將開始搜索從lastIndex開始的匹配項。

因此,當您在與整個字符串匹配的字符串上測試RegExp時,會將lastIndex設置為字符串的末尾。 下次測試時,它從字符串的末尾開始,返回false,並將lastIndex設置回零。

我們可以從上面的代碼示例中看到這種行為:

pattern.test("21/12/2009");
true
pattern.lastIndex
10
pattern.test("21/12/2009");
false
pattern.lastIndex
0
pattern.test("21/12/2009");
true

暫無
暫無

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

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