javascript - Regex match should be 1 or 2 digit but not zero with single digit in date format -
var dateobj = { '01/01/2017' : true, '1/1/2016' : true, '1/1/16' : true, '1/1/116' : false, '01/11/2016' : true, '01.01.2016' : true, '01.01_2016' : false, '01-0-2016' : false, '01-01-2016' : true }; var failedattempts = []; var date_val = "01/01/2017"; var re = /^(\d{1,2})[/.\-](\d{1,2})[/.\-](\d{4}|\d{2})$/; for(let in dateobj){ let result = re.test(i); if(result != dateobj[i]){ failedattempts.push(i); } } if(failedattempts.length > 0){ console.error('unit test fails'); console.log(failedattempts); }else{ console.log('unit test pass'); }
'01-0-2016' : false
consider case returns true in wrong format. want rewrite regex digit matches either 1
or 2
not 0
in single
digit.
restrict digit matching patterns negative (?!0+\b)
lookaheads:
/^(?!0+\b)(\d{1,2})[\/.-](?!0+\b)(\d{1,2})[\/.-](\d{4}|\d{2})$/ ^^^^^^^^ ^^^^^^^^
see regex demo
if needn't restrict both day month parts, remove unnecessary lookahead.
the (?!0+\b)
pattern matches 1 or more zeros followed word boundary (that is, there cannot letter/digit/_
after it), , if pattern found, match failed.
Comments
Post a Comment