仅允许使用正则表达式和字符串替换的HTML / Javascript中的1-12和00-59输入

问题描述 投票:0回答:2

要遵循12小时时间格式,我试图替换两个输入字段中的文本,一个只允许1-12的数字,另一个只允许00-59的数字。到目前为止,我一直在使用javascript字符串替换,当不在输入事件上包含正则表达式模式时。

我一直在尝试下面的正则表达式的不同的负前瞻变化(如果不包含那些值,则替换)但没有运气

<input type="text" oninput="this.value = this.value.replace(/?!(1[0-2]|[1-9])/g, '');" />
javascript html regex replace regex-negation
2个回答
3
投票

一种方法可能是使用test并使用^(?:1[0-2]|[1-9])$匹配1到12的数字

如果值不是1 - 12,则将其设置为空字符串。

<form id="" name="">
  <input type="text" oninput="if (!/^(?:1[0-2]|[1-9])$/.test(this.value)) { this.value = '' }" />
</form>

2
投票

正则表达式中的否定断言总是“零宽度”;也就是说,字符串中没有特定部分不匹配。

要查看原因,请考虑在分钟字段中输入的字符串“123”;显然,它与模式/ 1 [0-2] | [1-9] /不匹配,但是哪个部分使它不匹配?它是3,留下12吗?或者也许是1,留下你23?或者也许2和3都应该被删除,只留下1?

在这样的情况下,最好的方法可能是检测你想保留的部分,捕获它,然后丢弃其他所有东西,而不是做出否定的断言。例如,如果你匹配/^.*?(1[0-2]|[1-9])?.*?$/,整个字符串将始终匹配,并且有效部分(如果它在那里)将在捕获变量$ 1中;所以你可以用捕获的部分替换整个字符串,有效地删除其余部分(开头和结尾的。*?)。

© www.soinside.com 2019 - 2024. All rights reserved.