这个jQueryvalidation代码有什么问题? regexp.exec(值)

值将是任何值,匹配为null。 这一点的意思是拆分像“1991-12-01”这样的字符串,并确保字符串的所有部分都是有效日期。

dateISO: function(value, element) { if (this.optional(element)) return true; var regexp = new RegExp('^\d{4}[\/-](\d{1,2})[\/-](\d{1,2})$'); var matches = regexp.exec(value); alert(matches); 

有任何想法吗?

你给出的表达式是一个字符串,因此需要转义:

 var regexp = new RegExp('^\\d{4}[\\/-](\\d{1,2})[\\/-](\\d{1,2})$'); 

或者,您可以执行perl样式表达式,但需要转义斜杠:

 var regexp = /^\d{4}[\\/-](\d{1,2})[\\/-](\d{1,2})$/; 

(perl风格的正则表达式返回一个RegExp对象)

为什么不在这里完全跳过正则表达式? 我知道这是更多的代码,但它会给正则表达式不能的日期带来错误,比如指定11月31日的日期。

 var datesToTest = [ "1991-12-01" // valid , "1991-11-31" // invalid, Nov has 30 days , "1991-13-01" // invalid, no 13th month ]; // Note: console.log() requires Firebug - switch to alert() if you wish for ( var i = 0; i < datesToTest.length; i++ ) { if ( !isValidDate( datesToTest[i], '-' ) ) { console.log( datesToTest[i] + ' is not a valid date!' ); } else { console.log( datesToTest[i] + ' is valid date!' ); } } function isValidDate( dateAsString, delimiter ) { var dateObject = new Date( dateAsString.replace( new RegExp( delimiter, 'g' ), '/' ) ); var checkDate = [ dateObject.getFullYear() , zeroFill( dateObject.getMonth() + 1, 2 ) , zeroFill( dateObject.getDate(), 2 ) ].join( delimiter ); return ( dateAsString == checkDate ); } function zeroFill( number, width ) { width -= number.toString().length; if ( width > 0 ) { return new Array( width + (/\./.test( number ) ? 2 : 1) ).join( '0' ) + number; } return number; } 

只要您不需要在100 AD = P之前validation日期,这将有效