我知道有很多正则表达式的线程,我需要一个我无法在任何地方找到的特定模式
此正则表达式以YYYY-MM-DD格式验证
/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/
Run Code Online (Sandbox Code Playgroud)
我需要模式为DD/MM/YYYY(第一天因为它是西班牙语而且只有"/"," - "不应该被允许)
我搜索了几个正则表达式库,我认为这个应该可以工作......但是因为我不熟悉正则表达式我不确定它是否有效验证
(0[1-9]|[12][0-9]|3[01])[ \.-](0[1-9]|1[012])[ \.-](19|20|)\d\d
Run Code Online (Sandbox Code Playgroud)
我也不知道为了逃避斜线,我试图"看到"字符串中的逻辑,但这就像是为我"看"矩阵代码.我将正则表达式字符串放在选项.js中
[...] },
"date": {
"regex": (0[1-9]|[12][0-9]|3[01])[ \.-](0[1-9]|1[012])[ \.-](19|20|)\d\d,
"alertText": "Alert text AAAA-MM-DD"
},
"other type..."[...]
Run Code Online (Sandbox Code Playgroud)
那么,如果正则表达式没问题,我该如何逃避呢?如果不是,那么正确的正则表达式是什么?我该如何逃避呢?:P
非常感谢
mVC*_*Chr 78
您可以使用验证YYYY/MM/DD的正则表达式并将其翻转以获得您对DD/MM/YYYY所需的内容:
/^(0?[1-9]|[12][0-9]|3[01])[\/\-](0?[1-9]|1[012])[\/\-]\d{4}$/
Run Code Online (Sandbox Code Playgroud)
顺便说一句 - 这个正则表达式验证DD/MM/YYYY或DD-MM-YYYY
PS这将允许日期,如31/02/4899
mae*_*ics 34
正则表达式适用于匹配常规格式,但我认为您应该将解析移动到Date类,例如:
function parseDate(str) {
var m = str.match(/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/);
return (m) ? new Date(m[3], m[2]-1, m[1]) : null;
}
Run Code Online (Sandbox Code Playgroud)
现在您可以使用此功能检查有效日期; 但是,如果您需要实际验证而不进行滚动(例如"31/2/2010"不会自动滚动到"2010年3月3日"),那么您还有另一个问题.
[编辑]如果您还想在不滚动的情况下进行验证,则可以添加一个检查以与原始字符串进行比较,以确保它是相同的日期:
function parseDate(str) {
var m = str.match(/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/)
, d = (m) ? new Date(m[3], m[2]-1, m[1]) : null
, nonRolling = (d&&(str==[d.getDate(),d.getMonth()+1,d.getFullYear()].join('/')));
return (nonRolling) ? d : null;
}
Run Code Online (Sandbox Code Playgroud)
[Edit2]如果你想与零填充日期匹配(例如"08/08/2013"),你可以这样做:
function parseDate(str) {
function pad(x){return (((''+x).length==2) ? '' : '0') + x; }
var m = str.match(/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/)
, d = (m) ? new Date(m[3], m[2]-1, m[1]) : null
, matchesPadded = (d&&(str==[pad(d.getDate()),pad(d.getMonth()+1),d.getFullYear()].join('/')))
, matchesNonPadded = (d&&(str==[d.getDate(),d.getMonth()+1,d.getFullYear()].join('/')));
return (matchesPadded || matchesNonPadded) ? d : null;
}
Run Code Online (Sandbox Code Playgroud)
但是,对于不一致的填充日期(例如"8/08/2013"),它仍然会失败.
Oam*_*ieR 33
请看http://forums.asp.net/t/1410702.aspx/1
使用以下正则表达式详细信息,这也将支持闰年.
var reg = /^(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\/(0[13456789]|1[012])\/((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\/02\/((19|[2-9]\d)\d{2}))|(29\/02\/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/g;
Run Code Online (Sandbox Code Playgroud)
edi*_*did 10
我将此函数用于dd/mm/yyyy格式:
// (new Date()).fromString("3/9/2013") : 3 of september
// (new Date()).fromString("3/9/2013", false) : 9 of march
Date.prototype.fromString = function(str, ddmmyyyy) {
var m = str.match(/(\d+)(-|\/)(\d+)(?:-|\/)(?:(\d+)\s+(\d+):(\d+)(?::(\d+))?(?:\.(\d+))?)?/);
if(m[2] == "/"){
if(ddmmyyyy === false)
return new Date(+m[4], +m[1] - 1, +m[3], m[5] ? +m[5] : 0, m[6] ? +m[6] : 0, m[7] ? +m[7] : 0, m[8] ? +m[8] * 100 : 0);
return new Date(+m[4], +m[3] - 1, +m[1], m[5] ? +m[5] : 0, m[6] ? +m[6] : 0, m[7] ? +m[7] : 0, m[8] ? +m[8] * 100 : 0);
}
return new Date(+m[1], +m[3] - 1, +m[4], m[5] ? +m[5] : 0, m[6] ? +m[6] : 0, m[7] ? +m[7] : 0, m[8] ? +m[8] * 100 : 0);
}
Run Code Online (Sandbox Code Playgroud)
Scape斜杠\
以前只是使用/
,它将被转义.(\/
=> /
).
否则你是正则表达式DD/MM/YYYY可能是下一个:
/^[0-9]{2}[\/]{1}[0-9]{2}[\/]{1}[0-9]{4}$/g
[0-9]
:只是数字{2}
或{4}
:长度2或4.您也可以{2,4}
在两个数字之间取长(在这种情况下为2和4)[\/]
:性格 /
g
:Global - 或m
:Multiline(可选,请参阅您的要求)$
:锚定到字符串的结尾.(可选,请参阅您的要求)^
:字符串开头.(可选,请参阅您的要求)使用示例:
var regex = /^[0-9]{2}[\/][0-9]{2}[\/][0-9]{4}$/g;
var dates = ["2009-10-09", "2009.10.09", "2009/10/09", "200910-09", "1990/10/09",
"2016/0/09", "2017/10/09", "2016/09/09", "20/09/2016", "21/09/2016", "22/09/2016",
"23/09/2016", "19/09/2016", "18/09/2016", "25/09/2016", "21/09/2018"];
//Iterate array
dates.forEach(
function(date){
console.log(date + " matches with regex?");
console.log(regex.test(date));
});
Run Code Online (Sandbox Code Playgroud)
当然你可以用作布尔值:
if(regex.test(date)){
//do something
}
Run Code Online (Sandbox Code Playgroud)
尝试使用这个..
[0-9]{2}[/][0-9]{2}[/][0-9]{4}$
Run Code Online (Sandbox Code Playgroud)
这应该适用于这种模式DD/DD/DDDD
,其中 D 是任何数字 (0-9)