我正在尝试验证时间
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]$/;
让我在哪里出错?
答案 0 :(得分:5)
试试这个
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
答案 1 :(得分:2)
JavaScript不支持(?i)
,但它支持i
标志,以便为整个正则表达式启用不区分大小写的匹配。此外,在regexp文字(与普通字符串文字相对)中,当它用作元字符时不要转义反斜杠:
var re = /^(1[012]|[1-9]):[0-5][0-9]\s?(am|pm)$/i;
答案 2 :(得分:-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
}