2011-05-20 80 views
1

格式日期:MMM D[,] YYYY幫我創建的正則表達式

[,] - 可選的逗號,可能會有一些空間。例如:

Nov 12,  2000 - true 
Nov 12 2000 - true 
Nov 12, 2000 - true 
Nov  12, 2000 true 

我的正則表達式:/^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\ *(\d{1,2})\,? *(\d{4})$/ 但如果價值 - 2010年3月所有,如果真

我的校驗值功能

function checkDateWithStringMonth1(value) { 
     //reset 
     resetDate(); 
     //set min and max date 
     var minYear = 1900; 
     //var maxYear = (new Date()).getFullYear(); 
     // regular expression to match required date format 
     re = /^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\ *(\d{1,2})\,? *(\d{4})$/; 
     //check correct 
     if (value != '') { 
      if (regs = value.match(re)) { 
       if (regs[2] < 1 || regs[2] > 31) { 
        return false; 
       } 
       if(regs[3] < minYear){return false;} 
      } else { return false; } 
     } else { return false; } 
     //assign 

     return true;   
    } 
+0

我不是JS專家,但不是有可以日期字符串轉換爲Date對象的功能? – John 2011-05-20 16:39:22

+1

我不確定問題是什麼。你是說給這個字符串'2010年3月'返回'真'嗎? – andrewdski 2011-05-20 17:00:27

+0

'Mar 12,2010'有效嗎? (逗號後沒有空格) – adamse 2011-05-20 17:47:49

回答

2
/^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+(\d{1,2}),?\s+(\d{4})$/ 

從原來的區別:

  • \s代替[空格]以處理不同類型的空白
  • +代替*的:*表示0或者更多,你要1個或多個
  • 無需轉義,

編輯:爲了與逗號後沒有空間容納日期:

/^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+(\d{1,2})(?:,|\s)\s*(\d{4})$/ 
  • (?:統計非捕獲組。
  • (?:,|\s)\s*:允許逗號或空白字符,然後可能更多空格。

測試:

var dates = ["Nov 12,  2000", "Nov 12 2000", "Nov 12, 2000", "Nov  12, 2000", "Nov 12,2000"], 
    regex = /^(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s+(\d{1,2})(?:,|\s)\s*(\d{4})$/; 

dates.map(function (d) { return regex.test(d); }); 
// => [true, true, true, true, true] 
+0

匹配,但2010年3月12日有效。需要改變。 – isxaker 2011-05-20 17:57:03

+0

必須是一個分隔符 – isxaker 2011-05-20 17:59:26

+1

第二個正則表達式適用於所有示例。 – adamse 2011-05-20 18:06:10

1

如果我沒有記錯,你不需要逃避逗號。這可能有幫助。 而不是使用空格,您可能想要使用空格字符\s,它將檢測空格,新行和製表符(新行可能不適用於您)。

+0

不,它不能解決我的問題 – isxaker 2011-05-20 17:38:29

+0

什麼符號說一個或多個? * - 零個或多個; ? - 零或一個;什麼符號說一個或多個? – isxaker 2011-05-20 17:42:02

+2

'+'字符將與以前的一個或多個字符 – kstev 2011-05-20 17:43:09