jQuery dd-mmm-yyyy 中的数据格式用正则表达式检查

jQuery Data Format in dd-mmm-yyyy check with regular expression

我需要检查dd-mm-yyyy格式的数据格式。

我正在使用以下内容:

if (ValidateDate() == false) {
   alert("Wrong Date Format");
return false;
}

function ValidateDate() {

    var dtValue = $('#txtEnteredStartDate').val();
    var dtRegex = new RegExp("^(([1-9]|0[1-9]|1[0-9]|2[1-9]|3[0-1])[-]([JAN|FEB|MAR|APR|MAY|JUN|JULY|AUG|SEP|OCT|NOV|DEC])[-](d{4}))$");
    return dtRegex.test(dtValue);
}

但是当我在字段中输入 dd-mmm-yyyy 时,例如 19-Nov-2015,我收到错误 Wrong date format

我做错了什么?

你的正则表达式中有几个错误

首先,(d{4}) 需要是 (\d{4}) 因为它当前正在寻找 4 d 并且需要寻找四位数

其次,月份周围的括号导致它在寻找 单个字符 JA 或 [=16 时失败=] 或 FEB

最后,它需要是不区分大小写的正则表达式

以下正则表达式应该有效:

/^(([1-9]|0[1-9]|1[0-9]|2[1-9]|3[0-1])[-](JAN|FEB|MAR|APR|MAY|JUN|JULY|AUG|SEP|OCT|NOV|DEC)[-](\d{4}))$/i

如所见here

PhilVarg 的 正则表达式是正确的,尽管在 RegExp 中应用它你需要 \ d.

此外,您可以将 ([1-9]|0[1-9]|1[0-9]|2[1-9]|3[0-1]) 重构为 ([0]?[1-9]|[1-2]\d|3[0-1]),这意味着选项 0 后跟 1 到 9 或 1,2 后跟数字,或 3 后跟 0 或1.

1 最后一点,- 周围不需要 [],要传递 i(忽略大小写)RegExp 接受它作为第二个参数。

工作示例:-

function ValidateDate() {
  var dtValue = $('#txtEnteredStartDate').val();
  var dtRegex = new RegExp("^([0]?[1-9]|[1-2]\d|3[0-1])-(JAN|FEB|MAR|APR|MAY|JUN|JULY|AUG|SEP|OCT|NOV|DEC)-[1-2]\d{3}$", 'i');
  return dtRegex.test(dtValue);
}

$('.check').click(function() {
  if (ValidateDate() == false) {
    $('.result').html("Wrong Date Format");
  } else {
    $('.result').html("Right Date Format");
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="txtEnteredStartDate" value="19-Nov-2015" />
<input type="button" class="check" value="check" />
<span class="result"></span>

我找到了另一种适合我的方法:

function ValidateDate(dtValue) {

    var dtRegex = new RegExp(/^\d\d?-\w\w\w-\d\d\d\d/);
    return dtRegex.test(dtValue);
}

谢谢大家的建议