gpt4 book ai didi

javascript - 正则表达式在 JS 中无法正常工作

转载 作者:行者123 更新时间:2023-11-28 19:54:19 25 4
gpt4 key购买 nike

我想要一个简单的捕获和测试程序,用于使用此正则表达式的特定日期格式(与 Date.parse - NaN 不兼容):

/(\d{1,2})\/(\d{1,2})\/(\d{2,4})/ //day/month/year

它适用于 rubular 测试仪,但在 chrome 中使用它会产生奇怪的结果:

dateRegex.test("19111/7/1992")
> true
"19111/7/1992".match(dateRegex) //Wrong on purpose
> ["11/7/1992", "11", "7", "1992"] //Why is it matching 11?

我需要注意 JavaScript RegEx 的具体情况吗?

最佳答案

实际的匹配例程应该由其他答案很好地解释。

要进一步验证日期,您可以执行以下操作:

function valiDate(d) {
var v, m = d.match(/^(\d{1,2})\/(\d{1,2})\/(\d{1,4})$/);
if (!m)
return false;
v = new Date(m[3], m[2] - 1, m[1]);
return m[1] == v.getDate() &&
m[2] == v.getMonth() + 1 &&
m[3] == v.getFullYear()
;
}

或者可能更快:

function valiDate(d) {
function leap(y) {
return !((y%4)||(!(y%100) && (y%400)));
}
var m = d.match(/^(\d{1,2})\/(\d{1,2})\/(\d{1,4})$/);

// Not match || date or month below 1, or month above 12
if (!m || m[1] < 1 || m[2] < 1 || m[2] > 12) {
return false;
// Jan,Mar,May,Jul,Aug,Oct,Dec
} else if ([2,4,6,9,11].indexOf(+m[2]) < 0) {
return m[1] < 32;
// Feb
} else if (m[2] === '2') {
return m[1] < 29 ? true :
m[1] < 30 && leap(+m[3]);
// Apr,Jun,Sep,Nov
} else {
return m[1] < 31;
}
}

关于javascript - 正则表达式在 JS 中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22868059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com