帮我创建正则表达式

时间:2011-05-20 16:34:17

标签: javascript regex

格式化日期:MMM D[,] YYYY

[,] - 可选逗号,可能是一些空格。例如:

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

我的regExp:/^(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;        
    }

2 个答案:

答案 0 :(得分:2)

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

与原作的区别:

  • \s而不是[space]来处理不同类型的空白
  • +代替**表示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]

答案 1 :(得分:1)

如果我没记错,你不需要逃脱逗号。这可能有所帮助。 而不是使用空格,您可能希望使用空格字符\s来检测空格,新行和制表符(新行可能不适用于您)。

相关问题