是否有现有解决方案可以根据给定的日期时间格式模式动态创建正则表达式?支持的日期时间格式模式不重要(Joda DateTimeFormat
、java.text.SimpleDateTimeFormat
或其他)。
以具体的示例为例,对于给定的日期时间格式,例如dd/MM/yyyy hh:mm
,它应生成相应的正则表达式以匹配指定格式内的日期时间。
是否有现有解决方案可以根据给定的日期时间格式模式动态创建正则表达式?支持的日期时间格式模式不重要(Joda DateTimeFormat
、java.text.SimpleDateTimeFormat
或其他)。
以具体的示例为例,对于给定的日期时间格式,例如dd/MM/yyyy hh:mm
,它应生成相应的正则表达式以匹配指定格式内的日期时间。
\b(0?[1-9]|[12][0-9]|3[01])[- /.](0?[1-9]|1[012])[- /.](19|20)?[0-9]{2}\b
10/07/2008
10.07.2008
1-01/2008
10/07/08
10.07.2008
1-01/08
通过regexbuddy编写代码
SimpleDateFormat
已经通过 parse()
方法实现了这一点。
如果您需要从单个字符串解析多个日期,请使用正则表达式(即使它匹配过于宽松),并在正则表达式找到的所有潜在匹配上使用parse()
方法。
以下给出的js / jQuery代码是用于动态生成仅针对日期格式的正则表达式,而不是DateTime(开发版本尚未完全测试)。
日期格式应为“D M Y”。
例如:
- DD-MM-YY
- DD-MM-YYYY
- YYYY-MM-DD
- YYYY-DD-MM
- MM-DD-YYYY
- MM-DD-YY
- DD/MM/YY
- DD/MM/YYYY
- YYYY/MM/DD
- YYYY/DD/MM
- MM/DD/YYYY
- MM/DD/YY
或其他使用“D M Y”字符创建的格式:
var dateFormat = "DD-MM-YYYY";
var order = [];
var position = {"D":dateFormat.search('D'),"M":dateFormat.search('M'),"Y":dateFormat.search('Y')};
var count = {"D":dateFormat.split("D").length - 1,"M":dateFormat.split("M").length - 1,"Y":dateFormat.split("Y").length - 1};
var seprator ='';
for(var i=0; i<dateFormat.length; i++){
if(["Y","M","D"].indexOf(dateFormat.charAt(i))<0){
seprator = dateFormat.charAt(i);
}else{
if(order.indexOf(dateFormat.charAt(i)) <0 ){
order.push(dateFormat.charAt(i));
}
}
}
var regEx = "^";
$(order).each(function(ok,ov){
regEx += '(\d{'+count[ov]+'})'+seprator;
});
regEx = regEx.substr(0,(regEx.length)-1);
regEx +="$";
var re = new RegExp(regEx);
console.log(re);
注意:月份/日期没有验证检查
例如,月份应为01-12或日期应为01-31