2012-01-11 76 views
13

我被一个正则表达式掩盖输入字段所沮丧。我想将输入限制为hh:mm AM | PM格式,我无法使这个正则表达式正常工作。用于jquery的AM PM时间格式的正则表达式

我使用这个正则表达式与来自www.ThimbleOpenSource.com的jQuery工具一起使用。这是filter_input.js工具或其他。

它似乎适用于一个简单的正则表达式,但我想出了一个似乎并没有工作。这是我下面的jsFiddle测试链接。

jsFiddle

+1

你在你的小提琴中的正则表达式就是'[a-z]'...你认为这是正确的过滤器吗?你有没有试过Google时间格式的正则表达式? – ean5533 2012-01-11 13:52:35

+0

问题是你想要的。这个filter_input插件似乎检查每个击键的输入。但是,你不能检查时间格式。如果你想按照描述检查时间格式,你应该检查模糊处或输入表单的输入字段的值(例如)。 – Armin 2012-01-11 13:57:08

+1

如果你是像/ [0-2] [0-9]:[0-1] [0-9] AM/PM /这样的正则表达式,当用户在输入框中写入内容时,脚本会尝试匹配他第一个键盘输入整个正则表达式。因此,如果你写作第一个键盘输入“2”,脚本会尝试将“2”与/ [0-2] [0-9]:[0-1] [0-9] AM/PM /匹配,而不是正确。 filter_input只能用简单的正则表达式工作。 – Kakawait 2012-01-11 14:00:23

回答

23

我已经做了的jsfiddle例如,基于答案冯尤里的正则表达式: http://jsfiddle.net/Evaqk/

$('#test1, #test2').blur(function(){ 
    var validTime = $(this).val().match(/^(0?[1-9]|1[012])(:[0-5]\d) [APap][mM]$/); 
    if (!validTime) { 
     $(this).val('').focus().css('background', '#fdd'); 
    } else { 
     $(this).css('background', 'transparent'); 
    } 
}); 
2

首先,如果你使用它的输入字段,你永远不应该使用文本字段让用户输入日期和时间信息,并希望这将是严格的格式。

但是,如果你坚持:

/^(0?[1-9]|1[012])(:[0-5]\d) [APap][mM]$/ 

此正则表达式将验证在AM/PM格式的时间。

+0

这似乎不工作与jsFiddle功能我有 – SoftwareSavant 2012-01-11 14:38:43

+0

那么,因为它是在@Kakawait的评论中写的,因为它在按键上运行,所以它只能用于避免字段中的无效字符,而不能用于有效的格式。使用你的函数,你只能指定字符:'[0-9:APM]' – YuS 2012-01-11 14:47:53

2

你不能做到这一点与该插件因为在这里你需要检查每一个字符。

HTML:

<form> 
    <p>When?</p> 
     <input type="text" id="test1" placeholder="hh:mm(AM|PM)"/> 
</form> 

的JavaScript:

$("#test1").keypress(function(e) { 
    var regex = ["[0-2]", 
    "[0-4]", 
    ":", 
    "[0-6]", 
    "[0-9]", 
    "(A|P)", 
    "M"], 
    string = $(this).val() + String.fromCharCode(e.which), 
    b = true; 
    for (var i = 0; i < string.length; i++) { 
     if (!new RegExp("^" + regex[i] + "$").test(string[i])) { 
      b = false; 
     } 
    } 
    return b; 
}); 

+0

嘿,我们应该把它变成一个simpleMaskPluggin! – SoftwareSavant 2012-01-11 18:15:00

1

所以我敢肯定这是由现在问题解决了,但我最近与此挣扎,不能足够快地找到答案。我使用Bootstrap Validator(由@nghuuphuoc提供的bootstrapvalidator.com)和Eonasdan的DateTimepicker一起验证一个小时(PS:您可以在Eonasdan的插件中禁用日期)。

由于Bootstrap Validator还没有时间验证程序,因此您必须使用正则表达式。这一个完美的工作对我来说:

^([0-1]?[0-9]|2[0-3]):[0-5][0-9] [APap][mM]$

+0

如果你打算要求AM或PM,那么允许小时数大于12是没有意义的。 – chad 2015-04-27 19:10:39

+0

你应该限制小时数大于12,那么正则表达式就是这样的: '(0?[1-9] | 1 [0-2]):[0-5] [0-9]?[APap] [mM] $' – lucasarruda 2016-06-08 00:47:53

0

的follwing函数返回(真/假)值

function CheckTime(HtmlInputElement) { 
     var dt = HtmlInputElement.value; 
     return (/(0?[1-9]|1[0-2]):[0-5][0-9] ?[APap][mM]$/.test(dt)); 
} 
0

检查这个解决方案了。

<!DOCTYPE html> 
<html> 
<body> 

<p>This demo used to validate time with 12 hours format</p> 

<button onclick="myFunction()">Try it</button> 

<p id="demo"></p> 

<script> 
function myFunction() { 
    var regexp = /^(0?[1-9]|1[012])(:[0-5]\d) [APap][mM]$/; 
    var res = regexp.test('12:00 AM'); //try with alphabets or wrong format 
    document.getElementById("demo").innerHTML = res; 
} 
</script> 

</body> 
</html>