我被一个正则表达式掩盖输入字段所沮丧。我想将输入限制为hh:mm AM | PM格式,我无法使这个正则表达式正常工作。用于jquery的AM PM时间格式的正则表达式
我使用这个正则表达式与来自www.ThimbleOpenSource.com
的jQuery工具一起使用。这是filter_input.js工具或其他。
它似乎适用于一个简单的正则表达式,但我想出了一个似乎并没有工作。这是我下面的jsFiddle测试链接。
我被一个正则表达式掩盖输入字段所沮丧。我想将输入限制为hh:mm AM | PM格式,我无法使这个正则表达式正常工作。用于jquery的AM PM时间格式的正则表达式
我使用这个正则表达式与来自www.ThimbleOpenSource.com
的jQuery工具一起使用。这是filter_input.js工具或其他。
它似乎适用于一个简单的正则表达式,但我想出了一个似乎并没有工作。这是我下面的jsFiddle测试链接。
我已经做了的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');
}
});
首先,如果你使用它的输入字段,你永远不应该使用文本字段让用户输入日期和时间信息,并希望这将是严格的格式。
但是,如果你坚持:
/^(0?[1-9]|1[012])(:[0-5]\d) [APap][mM]$/
此正则表达式将验证在AM/PM格式的时间。
这似乎不工作与jsFiddle功能我有 – SoftwareSavant 2012-01-11 14:38:43
那么,因为它是在@Kakawait的评论中写的,因为它在按键上运行,所以它只能用于避免字段中的无效字符,而不能用于有效的格式。使用你的函数,你只能指定字符:'[0-9:APM]' – YuS 2012-01-11 14:47:53
你不能做到这一点与该插件因为在这里你需要检查每一个字符。
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;
});
嘿,我们应该把它变成一个simpleMaskPluggin! – SoftwareSavant 2012-01-11 18:15:00
所以我敢肯定这是由现在问题解决了,但我最近与此挣扎,不能足够快地找到答案。我使用Bootstrap Validator(由@nghuuphuoc提供的bootstrapvalidator.com)和Eonasdan的DateTimepicker一起验证一个小时(PS:您可以在Eonasdan的插件中禁用日期)。
由于Bootstrap Validator还没有时间验证程序,因此您必须使用正则表达式。这一个完美的工作对我来说:
^([0-1]?[0-9]|2[0-3]):[0-5][0-9] [APap][mM]$
如果你打算要求AM或PM,那么允许小时数大于12是没有意义的。 – chad 2015-04-27 19:10:39
你应该限制小时数大于12,那么正则表达式就是这样的: '(0?[1-9] | 1 [0-2]):[0-5] [0-9]?[APap] [mM] $' – lucasarruda 2016-06-08 00:47:53
的follwing函数返回(真/假)值
function CheckTime(HtmlInputElement) {
var dt = HtmlInputElement.value;
return (/(0?[1-9]|1[0-2]):[0-5][0-9] ?[APap][mM]$/.test(dt));
}
检查这个解决方案了。
<!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>
你在你的小提琴中的正则表达式就是'[a-z]'...你认为这是正确的过滤器吗?你有没有试过Google时间格式的正则表达式? – ean5533 2012-01-11 13:52:35
问题是你想要的。这个filter_input插件似乎检查每个击键的输入。但是,你不能检查时间格式。如果你想按照描述检查时间格式,你应该检查模糊处或输入表单的输入字段的值(例如)。 – Armin 2012-01-11 13:57:08
如果你是像/ [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