Javascript正则表达式-匹配的字符串比表达式短吗?

时间:2020-10-20 14:21:33

标签: javascript regex

let productIdPattern = /[0-9]{3}[A-Z]{3}[0-9]{3}/ 
let userInput = '123A'
if (userInput.match(productIdPattern)) {
    alert("'123A' is ok, go ahead typing!")
}

给出上面的JavaScript伪代码。

用户正在输入产品ID。对于每个击键,我想检查输入是否与Product-ID模式匹配。如果不是,则将忽略按键。因此输入必须遵循模式。

例如:

  • 当前输入为“ 123”,用户按下“ 4”,这是无效,将被忽略。
  • 当前输入为“ 123”,用户按下有效的“ X”,并将其添加到输入中。

有没有一种方法可以在不为每个输入长度创建许多不同或复杂模式的情况下实现这一目标?如果字符串比模式短,我需要一种方法告诉“ String.match()”函数忽略模式的其余部分。

2 个答案:

答案 0 :(得分:1)

我们可以创建一个仅允许输入所需模式的输入过滤器;其他所有内容均立即删除。这是通过就地替换模式实现的:

<input type="text" formControlName="productIdInputC" 
    onkeyup="this.value = this.value.replace(/^([0-9]{3}[A-Z]{3}[0-9]{1,3}|[0-9]{3}[A-Z]{1,3}|[0-9]{1,3})?.*$/, '$1')">

尽管如此,您仍然应该具有服务器端验证。

答案 1 :(得分:0)

尝试以下模式:

/^(?:\d{1,3}|\d{3}[A-Z]{1,3}|\d{3}[A-Z]{3}\d{1,3})$/

您可以看到here的可视化视图。