2011-05-20 76 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