Regex日期表达式不起作用
Regex date expression not working
我有一个javascript函数可以进行一些日期验证。
var regex = new RegExp(my regex expression is here);
var result = regex.test(valueToTest);
然而,在过去的几个小时里,我一直在追我的尾巴,因为测试总是返回错误。
This does not work
^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/(19|20)'d'd$
This does not work
^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/(19|20)'d{2}$
This works
^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/(19|20)[0-9]{2}$
这三种模式之间的唯一区别是最后两位数字。所有这些看起来都是完全有效的,但只有第三个返回true。
我正在努力了解我是否做错了什么,或者浏览器(Firefox)是否有任何问题。
有什么想法吗?
没有regexp的验证如何?
function validateDate(string) {
var parts = string.split("/");
var year = parseInt(parts[2]);
var month = parseInt(parts[1]) - 1;
var day = parseInt(parts[0]);
var date = new Date(year, month, day);
return date.getFullYear() === year && date.getMonth() === month && date.getDate() === day;
}
演示
您可能将这些正则表达式放入一个字符串中,在这种情况下,"'d"
将被转换为"d"
。
尝试使用双斜线:"''d"
然而,我必须同意其他一些建议——不要使用regex来解析日期。他们真的不适合这份工作。
例如,您的表达式将允许不是日期的'31/02/1985'
。特别是,闰年(在400年的时间跨度内,除3年外,每4年发生一次)会遇到问题。试着用正则表达式匹配它!
如果使用构造函数new RegExp()
,则应使用字符串格式:
示例:
var regex = new RegExp(my regex expression is here);
var result = regex.test("(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/(19|20)[0-9]{2}" ,"ig");
但我不建议你使用构造函数。试着使用这个:
result.match(/^(0[1-9]|[12][0-9]|3[01])'/(0[1-9]|1[012])'/(19|20)[0-9]{2}$/ig);
如果没有,你想用你的RegExp做什么?
您需要使用"''d"
而不是"'d"
。
这将用测试数据重新解决您的问题:
var regex1 = new RegExp("^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/(19|20)'d'd$");
var regex2 = new RegExp("^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/(19|20)'d{2}$");
var regex3 = new RegExp("^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/(19|20)[0-9]{2}$");
document.write("<div>1: "+regex1.test("22/11/1982")+"</div>");
document.write("<div>2: "+regex2.test("22/11/1982")+"</div>");
document.write("<div>3: "+regex3.test("22/11/1982")+"</div>");
输出:
1: false
2: false
3: true
这重新修复:
var regex1 = new RegExp("^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/(19|20)''d''d$");
var regex2 = new RegExp("^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/(19|20)''d{2}$");
var regex3 = new RegExp("^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/(19|20)[0-9]{2}$");
document.write("<div>1: "+regex1.test("22/11/1982")+"</div>");
document.write("<div>2: "+regex2.test("22/11/1982")+"</div>");
document.write("<div>3: "+regex3.test("22/11/1982")+"</div>");
输出:
1: true
2: true
3: true
尝试转义正斜杠
例如:^(0[1-9]|[12][0-9]|3[01])'/(0[1-9]|1[012])'/(19|20)'d{2}$
相关文章:
- 我的AngularJS表达式没有'不起作用
- Angular Filter在指令表达式中不起作用
- 谷歌浏览器模式正则表达式在使用setCustomValidity动态创建表单时不起作用
- 属性选择器不起作用(语法错误、无法识别的表达式)
- 使用replace方法替换innerHTML以及在Javascript中不起作用的正则表达式
- 为什么javascript替换方法(没有regex)在angularjs表达式中不起作用来删除 
- javascript正则表达式不起作用:至少一个0-9,一个a-z,一个a-z,一个来自$-_.+*'()
- gulp-main-bower文件正则表达式过滤器不起作用
- 在javascript中提取正则表达式组不起作用
- AngularJS ng显示表达式在加载时不起作用
- Angular Js表达式不起作用
- 为什么Angular视图中的数组表达式不起作用
- 堆叠三元运算符在 Angularjs 表达式中不起作用
- 无法理解为什么Javascript正则表达式不起作用
- 将正则表达式存储在数组中在 Javascript 中不起作用
- 用于十进制验证的 Javascript 正则表达式不起作用
- 为什么 OR 在此正则表达式中不起作用
- 节点.js正则表达式不起作用
- 正则表达式 jQuery 不起作用
- 为什么这个简单的正则表达式不起作用