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')">
不过,您仍然应该进行服务器端验证。
关于Javascript Regex - 匹配比表达式短的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64447165/