3

我正在尝试验证时间

00:00 to 11:59 ends with AM OR PM

我正在尝试一些正则表达式,但没有成功验证时间。我的java脚本函数是

function verifydata( incoming ) {
var re = (1[012]|[1-9]):[0-5][0-9](\\s)?(?i)(am|pm);
if(incoming.time.value != '' && !incoming.time.value.match(re)) 
{
alert("Invalid time format: " + incoming.time.value);
}
}

它不工作

我也试过这个,不工作

var re = /^(?:[01][0-9]|2[0-3]):[0-5][0-9]$/;

让我哪里出错了?

4

3 回答 3

7

尝试这个

function testTime( time ) {
  var regex = /^([0-1][0-9])\:[0-5][0-9]\s*[ap]m$/i;
  var match = time.match( regex );
  if ( match ) {
    var hour  = parseInt( match[1] );
    if ( !isNaN( hour) && hour <= 11 ) {
      return true;
    }
  }
  return false;
}

testTime( '12:00 AM' ); // false  
testTime( '11:59 PM' ); // true  
testTime( '00:00 AM' ); // true  
testTime( '00:00am' ); // true  
testTime( '10:00pm' ); // true  
于 2013-07-22T22:39:22.073 回答
2

JavaScript 不支持(?i),但它支持i为整个正则表达式启用不区分大小写匹配的标志。此外,在正则表达式文字(与普通字符串文字相反)中,当反斜杠用作元字符时不要转义它:

var re = /^(1[012]|[1-9]):[0-5][0-9]\s?(am|pm)$/i;
于 2013-07-22T22:32:00.500 回答
-1

我不是所有东西的正则表达式的粉丝 - 特别是,我不喜欢它们的数字范围。

假设函数的编写方式有一些横向:

 // regex used for "high level" check and extraction
 // matches "hh:mmAM", "hh:mm", "hh:mm PM", etc
 var matches = inp.match(/^(\d\d):(\d\d)\s?(?:AM|PM)?$/)
 if (matches && matches.length == 3) {
   var h = parseInt(matches[1], 10)
   var m = parseInt(matches[2], 10)
   // range checks done in code after getting numeric value
   return h >= 1 && h <= 12 && m >= 0 && m <= 59
 } else {
   return false
 }
于 2013-07-22T22:25:21.107 回答