如何限制无效值输入具有正则表达式模式的输入字段

时间:2020-02-20 09:38:37

标签: html typescript

我有一个输入字段,在其中我希望前4个字符仅是数字,之后只允许点(。),然后只允许2个数字。例如:9999.99

我还希望如果要输入其他内容,则不应在输入字段中输入。

为此,我创建了一个正则表达式为:^[0-9]{4}+\.+[0-9]{2}+$

HTML:<input type="text" (keypress)="onKeydown($event)">

TS:

regex = '/^[0-9]{4}+\.+[0-9]{2}+$/';

  onKeydown(event) {
    if(event.target.value.match(this.regex)) {
      return true;
    } else return false;
  }

但是我想我在这里做错了什么。请让我知道。

谢谢。

1 个答案:

答案 0 :(得分:0)

您的正则表达式中不需要+(选择1个或更多匹配项)。

相反,您需要|(或)来捕获两种情况:输入不包含点和添加点。

尝试类似这样的操作:/^(?:\d{0,4}|\d{4}\.\d{0,2})$/

我添加了?:(非捕获组标记)以排除匹配组,但这不是必需的。

更新:以下是使用oninput事件处理程序的快速草图:

var regex = /^(?:\d{0,4}|\d{4}\.\d{0,2})$/;
var lastValue = "";

function onInput(e) {
	var currentValue = e.target.value;

	if (!currentValue.match(regex))
		e.target.value = lastValue;
	else
		lastValue = currentValue;
}
<input type="text" oninput="onInput(event)">

相关问题