2

我试过这个正则表达式:

(0[1-9]|[12][0-9]|3[01])\.(0[1-9]|1[012])\.(19|20)\d\d

在文本类型的输入中,它可以正常工作:

<input type="Text" pattern="(0[1-9]|[12][0-9]|3[01])\.(0[1-9]|1[012])\.(19|20)\d\d"  title="Must be DD.MM.YYYY (ex: 29.11.2012)" class="std_input_long" id="toDate">

但是,当我尝试使用正则表达式对象在 JavaScript 中执行此操作时,它不起作用,任何人都可以解决这个问题。

JavaScript:

var regex = new RegExp('(0[1-9]|[12][0-9]|3[01])\.(0[1-9]|1[012])\.(19|20)\d\d');
var startDate = "23.11.2012";
var endDate = "11.12.2012";
var bStartDate = regex.test(startDate);
alert(bStartDate);
if (bStartDate) {
    var bendDate = regex.test(endDate);
    alert(bendDate);
    if (bendDate) {
        alert('both correct')
    } else {
        alert('End date incorrect must be DD.MM.YYYY \n\n\
               Example: 29.11.2012');
    }
} else {
    alert('Start date incorrect must be DD.MM.YYYY \n\n\
               Example: 29.11.2012');
}​

这是一个JSfiddle进行试验。

4

2 回答 2

2

它应该是

var regex = /(0[1-9]|[12][0-9]|3[01])\.(0[1-9]|1[012])\.(19|20)\d\d/;

字符串文字在传递给正则表达式引擎之前要经过解释,例如'\.'/./'\d'/d/

于 2012-11-29T09:36:14.317 回答
0

您需要转义正则表达式字符串中的反斜杠:

"(0[1-9]|[12][0-9]|3[01])\\.(0[1-9]|1[012])\\.(19|20)\\d\\d"

但是,使用正则表达式文字更容易,例如:

/(0[1-9]|[12][0-9]|3[01])\.(0[1-9]|1[012])\.(19|20)\d\d/.test("23.11.2012")

或使用字符串方法:

"23.11.2012".match(/(0[1-9]|[12][0-9]|3[01])\.(0[1-9]|1[012])\.(19|20)\d\d/)
于 2012-11-29T09:59:19.350 回答