要遵循12小时时间格式,我试图替换两个输入字段中的文本,一个只允许1-12的数字,另一个只允许00-59的数字。到目前为止,我一直在使用javascript字符串替换,当不在输入事件上包含正则表达式模式时。
我一直在尝试下面的正则表达式的不同的负前瞻变化(如果不包含那些值,则替换)但没有运气
<input type="text" oninput="this.value = this.value.replace(/?!(1[0-2]|[1-9])/g, '');" />
一种方法可能是使用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>
正则表达式中的否定断言总是“零宽度”;也就是说,字符串中没有特定部分不匹配。
要查看原因,请考虑在分钟字段中输入的字符串“123”;显然,它与模式/ 1 [0-2] | [1-9] /不匹配,但是哪个部分使它不匹配?它是3,留下12吗?或者也许是1,留下你23?或者也许2和3都应该被删除,只留下1?
在这样的情况下,最好的方法可能是检测你想保留的部分,捕获它,然后丢弃其他所有东西,而不是做出否定的断言。例如,如果你匹配/^.*?(1[0-2]|[1-9])?.*?$/
,整个字符串将始终匹配,并且有效部分(如果它在那里)将在捕获变量$ 1中;所以你可以用捕获的部分替换整个字符串,有效地删除其余部分(开头和结尾的。*?)。