Jquery 无法将正则表达式应用于时间输入
我正在使用时间选择器,希望限制用户输入的时间超过Jquery 无法将正则表达式应用于时间输入,jquery,regex,datetime,timepicker,Jquery,Regex,Datetime,Timepicker,我正在使用时间选择器,希望限制用户输入的时间超过23:59。我正在尝试使用正则表达式,但没有成功 HTML: <input type="text" id="test1" placeholder="HH:MM"/> jQuery $("#test1").keypress(function(e) { var regex = ["([01]?[0-9]|2[0-3])",":","[0-5][0-9]"], string = $(this).val() + Stri
23:59
。我正在尝试使用正则表达式,但没有成功
HTML:
<input type="text" id="test1" placeholder="HH:MM"/>
jQuery
$("#test1").keypress(function(e) {
var regex = ["([01]?[0-9]|2[0-3])",":","[0-5][0-9]"],
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;
});
$(“#test1”)。按键(功能(e){
var regex=[“([01]?[0-9]| 2[0-3])”,“:”,“[0-5][0-9]”,
string=$(this.val()+string.fromCharCode(e.which),b=true;
对于(变量i=0;i
它没有给出任何错误,但无法找出发生了什么
非常感谢您的帮助
谢谢描述
此表达式将:
- 仅匹配从
到00:00
23:59
- 捕获字符串的小时和分钟元素
^([01][0-9]| 2[0-3]):([0-5][0-9])$
现场示例如下:
jsIDLE:说明
此表达式将:
- 仅匹配从
到00:00
23:59
- 捕获字符串的小时和分钟元素
^([01][0-9]| 2[0-3]):([0-5][0-9])$
现场示例如下:
jsiddle:您可以根据每个字符自己的正则表达式测试每个字符 试一试
$("#test1").keypress(function(event)
{
var regexs = [/[0-2]/,/[0-3]/,/:/,/[0-5]/,/[0-9]/];
var key = event.which;
var string = $(this).val() + String.fromCharCode(key)
var characters = string.split("");
var passed = true;
var isBackspace = key === 8;
var shouldTest = characters.length < 5 && ! isBackspace;
passed = ! ( characters.length > 5 && ! isBackspace );
if(shouldTest)
{
for (var i = 0; i < characters.length; i++)
{
var character = characters[i];
var regex = regexs[i];
var testFailed = ! regex.test(character) ;
if( testFailed )
{
passed = false;
break;
}
}
}
return passed;
});
$(“#test1”)。按键(功能(事件)
{
变量regexs=[/[0-2]/,/[0-3]/,/:/,/[0-5]/,/[0-9]/];
var key=event.which;
var string=$(this.val()+string.fromCharCode(key)
var characters=string.split(“”);
var通过=真;
var isBackspace=key==8;
var shouldTest=characters.length<5&!isBackspace;
已通过=!(characters.length>5&&!isBackspace);
如果(应该测试)
{
对于(变量i=0;i
您可以根据每个字符自身的正则表达式测试每个字符
试一试
$("#test1").keypress(function(event)
{
var regexs = [/[0-2]/,/[0-3]/,/:/,/[0-5]/,/[0-9]/];
var key = event.which;
var string = $(this).val() + String.fromCharCode(key)
var characters = string.split("");
var passed = true;
var isBackspace = key === 8;
var shouldTest = characters.length < 5 && ! isBackspace;
passed = ! ( characters.length > 5 && ! isBackspace );
if(shouldTest)
{
for (var i = 0; i < characters.length; i++)
{
var character = characters[i];
var regex = regexs[i];
var testFailed = ! regex.test(character) ;
if( testFailed )
{
passed = false;
break;
}
}
}
return passed;
});
$(“#test1”)。按键(功能(事件)
{
变量regexs=[/[0-2]/,/[0-3]/,/:/,/[0-5]/,/[0-9]/];
var key=event.which;
var string=$(this.val()+string.fromCharCode(key)
var characters=string.split(“”);
var通过=真;
var isBackspace=key==8;
var shouldTest=characters.length<5&!isBackspace;
已通过=!(characters.length>5&&!isBackspace);
如果(应该测试)
{
对于(变量i=0;i
谢谢您的回复,但我对这些表达式很熟悉,我只是用keypress()
无法在我的代码中使用它,正如您在fiddle中看到的那样。再次感谢您提供的好例子。我不确定按键是最好的解决方案,因为它会尝试验证每一个按键的字符串,你可能会考虑模糊事件。谢谢你的回应,但是我对这些表达式很熟悉,我只是不知道它在我的代码中使用了<代码>键()/<代码>,你可以在小提琴中看到它。再次感谢您提供的好例子。我不确定KEPress是最好的解决方案,因为它将尝试验证每一个按键的字符串,您可能会考虑模糊事件。