Javascript 在“:”之后输入两位介于0和59之间的数字

Javascript 在“:”之后输入两位介于0和59之间的数字,javascript,jquery,Javascript,Jquery,我想在以下内容之后输入:一个从0到59的最大值。例如: 350:59 20:22 此代码有效,但最大值为99 $("#duration").on('input', function() { this.value = this.value.match(/^\d+\:?\d{0,2}/); }); 欢迎来到StackOverflow: 正如我在评论中所说,你可以指定你想要的字符,如果你说它是从00到59,你可以很容易地指定它 /\d{1,}\:[0-5][0-9]/g \d{1,}以十

我想在以下内容之后输入:一个从0到59的最大值。例如:

350:59
20:22
此代码有效,但最大值为99

$("#duration").on('input', function() { 
  this.value = this.value.match(/^\d+\:?\d{0,2}/); 
});

欢迎来到StackOverflow:

正如我在评论中所说,你可以指定你想要的字符,如果你说它是从00到59,你可以很容易地指定它

/\d{1,}\:[0-5][0-9]/g
\d{1,}以十进制数字[0-9]开头,该数字可以有1个或多个字符 \:后接: [0-5]跟位数必须介于0到5之间 [0-9]跟位数必须介于0到9之间 实例

您还可以复制粘贴下面的代码并在浏览器控制台中执行

常量regex=/\d{1,}\:[0-5][0-9]/g; 常量str=`350:59 20:22 1:68 0:12 24:75`; 让m; 而m=regex.execstr!==空的{ //这是避免具有零宽度匹配的无限循环所必需的 如果m.index==regex.lastIndex{ regex.lastIndex++; } //可以通过'm`-变量访问结果。 m、 forEachmatch,groupIndex=>{ log`find match,group${groupIndex}:${match}`; }; } TL;博士 对于逐字符输入的值,请尝试以下操作:

$'duration'。在'input'上,函数{ this.value=this.value.match/^\d+\:?[0-5]?[0-9]?/; }; 出身背景 这种设置在很大程度上取决于预期的输入类型以及输入值的输入方式。也就是说,如果它被键入、粘贴为一个整体或由一个函数插入

您当前的解决方案依赖于这样一个事实,即我们可以立即将匹配函数的结果指定为输入字段的值

该函数将返回以下内容:

一种数组,其内容取决于全局g标志的存在与否,如果找不到匹配项,则为null

考虑42:100的输入

常量结果='42:100'。匹配/^\d+\:?\d{0,2}/; 匹配返回:

[42:10,索引:0,输入:42:100,组:未定义] 我们立即将其分配回输入字段。它将选择显示该数组中的第一项,即42:10

如果match找不到匹配的模式,那么它将返回null,并且输入字段变为空白

可能的解决办法 因此,有了这些信息,我们现在知道,如果一个人一次输入一个字符的值,正则表达式对于每个合法的输入值总是能够匹配预期的模式,这一点很重要,这样它就可以被分配回输入字段

根据原始正则表达式,我认为您希望允许任何长度的数字,后面可能跟一个冒号,然后是一个类似秒的两位数值,即允许0–59

这里的关键是通过使用量词运算符?使最后两位数字也是可选的

因此,一种可能的解决方案是启用冒号后的可选数字,将其限制为0–59,例如:

$'duration'。在'input'上,函数{ this.value=this.value.match/^\d+\:?[0-5]?[0-9]?/; };
但同样,这一切都取决于输入字段中预期和允许输入的值的类型。

将字符串转换为数字并进行比较。已经有大量预构建的时间控件。这个\d{0,2}/只说明最后两位必须是数字,您可以很容易地看出第一位只能是[0-5]第二个从[0-9],给你00到59我试过这个东西,但没用为什么不行/\d{1,}\:[0-5][0-9]/->感谢您的回复,但使用jquery$duration。在“输入”中,函数{this.value=this.value.match/\d{1,}\:[0-5][0-9]/;};可能不与您一起工作,但是是的,您的代码工作得很好,但在我的情况下不是,因为我希望在input$duration中使用控件。在'input',函数{}上,我不知道您试图用代码实现什么,但应该很容易使工作答案适应您正在做的任何事情。。。而且我认为你应该更安全,而不是只在现场。谢谢你的回答,如果我找到解决方案,我会发布它