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()”函数忽略模式的其余部分。

    最佳答案

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

    <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')">

    但是,您仍然应该具有服务器端验证。

    10-06 03:51