【发布时间】:2021-02-11 13:37:01
【问题描述】:
我尝试使用 JavaScript 验证荷兰邮政编码。我有一个可以接受完整邮政编码的可行解决方案:
var dutchRegex = /^[1-9][0-9]{3} ?(?!sa|sd|ss)[a-z]{2}$/i
它接受像 1234ab 或 1234 ab 这样的任何东西,这正是我想要的。
但是当用户输入代码时,我该如何编辑这个正则表达式?
- 1 -> 正确
- 12 -> 是的
- 12r -> 假
- 1234 a -> 是的
- 1234ab -> 真的
- 1234 abc -> 假
【问题讨论】:
-
这有点“实施过度杀伤力”的味道——问问自己,你真的需要增加这种复杂性吗?当用户完成输入时,与仅验证整个输入是否正确相比,这真的会增加很多价值吗?
-
不要在 keypress/keydown/keyup 上验证。验证 onChange。
-
@WiktorStribiżew 除非您正确监听事件并使用 2 个正则表达式,否则这会让用户提交不完整的数据。
-
@TomLord 我需要这个来进行搜索输入。用户应该能够输入他/她的邮政编码并立即获得诸如 Input: 123 Suggested: 1234 AB - Sometone 之类的建议; 1235 AC - 某地
-
对 Wiktor 的正则表达式稍作修改,以解决
12r错误:^[1-9](?:[0-9]{1,3}|[0-9]{3} ?(?!sa|sd|ss)[a-z]{0,2})?$regex101.com/r/gEu935/1
标签: javascript regex validation ecmascript-6