需要验证jQueryUI Datepicker的文本框中用户输入的日期参数格式是否符合要求,其中y,m,w,d分别表示年,月,周,日,4者任意搭配,但不能重复出现,例如“+1y -2m +3w -4d”表示从今天开始往后1年,再往前2个月,再往后3周,再往前4天的日期,请问各位前辈这个正则该怎么写呢?
------解决方案--------------------
- JScript code
> var p = /[+-][0-9]+[ymdw]/g; undefined > '+1y -2m +3w -4d'.match(p) [ '+1y', '-2m', '+3w', '-4d' ] >
------解决方案--------------------
- JScript code
var reg = /^(?!.*?([ymwd]).*?\1)([+-]\d+[ymwd] *){1,4}$/;
------解决方案--------------------
var date={
reg:/^([+-]\d+[ymwd] *){4}$/
}
date.check=function(context){
if(context.indexOf('y')!=-1){
if(context.indexOf('m')!=-1){
if(context.indexOf('w')!=-1){
if(context.indexOf('d')!=-1){
if(date.reg.test(context)){
return true;
}
}
}
}
}
return false;
}
alert(date.check("+1y -m +3w -4d"));
一定要用正则吗?不会了
------解决方案--------------------
var reg = /^(?!.*?(?:[ymwd]).*?\1)(?:[+-]\d+[ymwd] *){1,4}$/;
------解决方案--------------------
- JScript code
var check = function(s){ var r = /^(?:\s*[-+]\d+[ymwd]\s*)+$/i; var isFormatRight = r.test(s); if(!isFormatRight) { return false; } var i, len, repeat=false, map={}, w, a = s.match(/[a-z]/gi); if(a && a.length <= 4){ for(i=0, len=a.length; i<len; i++){ w = a[i].toLowerCase(); if(map.hasOwnProperty(w)){ repeat = true; break; } map[w] = null; } }else{ repeat = true; } return !repeat; } alert(check(' +1y -2m +3w -4d'));
------解决方案--------------------
- JScript code
s1 = '+1y -2m +3w -4d'; s2 = '+1y -2m +3y -4d'; document.write(s1+' : '+check(s1)); document.write(s2+' : '+check(s2)); function check(s) { if(/([ymwd]).*\1/.test(s)) return false; return /[-+][0-9]+[ymwd]/.test(s); }