[英]Whats wrong with this jQuery validation code? regexp.exec(value)
值将为任何值,并且matchs为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之前的日期,这将起作用
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.