Javascript 如何编辑正则表达式以接受正确格式的未完成输入?

Javascript 如何编辑正则表达式以接受正确格式的未完成输入?,javascript,regex,validation,ecmascript-6,Javascript,Regex,Validation,Ecmascript 6,我尝试用JavaScript验证荷兰邮政编码。我有一个接受完整邮政编码的工作解决方案: var dutchRegex = /^[1-9][0-9]{3} ?(?!sa|sd|ss)[a-z]{2}$/i 它接受任何类似于1234ab或1234ab的内容,这正是我想要的 但是,当用户输入代码时,如何编辑这个正则表达式才能工作呢 1->正确 12->正确 12r->错误 1234 a->true 1234 ab->true 1234 abc->错误 我没有看到您的Javascript,因此我假设

我尝试用JavaScript验证荷兰邮政编码。我有一个接受完整邮政编码的工作解决方案:

var dutchRegex = /^[1-9][0-9]{3} ?(?!sa|sd|ss)[a-z]{2}$/i
它接受任何类似于1234ab1234ab的内容,这正是我想要的

但是,当用户输入代码时,如何编辑这个正则表达式才能工作呢

  • 1->正确
  • 12->正确
  • 12r->错误
  • 1234 a->true
  • 1234 ab->true
  • 1234 abc->错误

我没有看到您的Javascript,因此我假设您正在使用某种形式的keydown/keypress/keypup事件侦听器来告诉用户他们的输入与预期格式不匹配

为此,您可以使用以下正则表达式:

^[1-9](?:[0-9]{1,3}|[0-9]{3} ?(?!sa|sd|ss)[a-z]{0,2})?$
  • ^[1-9]
    -以数字1到9开头的字符串
  • (?:
    -启动非捕获组
    • [0-9]{1,3}
      -我们可以有1到3个数字
    • |
      -或
    • [0-9]{3}(?!sa|sd|ss)[a-z]{0,2}
      -要求邮政编码的字母部分后跟3位数字
  • -关闭非捕获组
  • -非捕获组是可选的
  • $
    -结束字符串锚定



注意:我的答案是文章评论中提供的正则表达式的一个稍加修改的版本,我没有看到你的Javascript,所以我假设你正在使用某种形式的keydown/keypress/keypup事件监听器来告诉用户他们的输入与预期的格式不匹配

为此,您可以使用以下正则表达式:

^[1-9](?:[0-9]{1,3}|[0-9]{3} ?(?!sa|sd|ss)[a-z]{0,2})?$
  • ^[1-9]
    -以数字1到9开头的字符串
  • (?:
    -启动非捕获组
    • [0-9]{1,3}
      -我们可以有1到3个数字
    • |
      -或
    • [0-9]{3}(?!sa|sd|ss)[a-z]{0,2}
      -要求邮政编码的字母部分后跟3位数字
  • -关闭非捕获组
  • -非捕获组是可选的
  • $
    -结束字符串锚定



注意:我的答案是对文章评论中提供的正则表达式稍加修改的版本,

另一个选项是

^[1-9](?!\d{0,2} ?[a-z])\d{0,3} ?[a-z]{0,2}$(?<!s[ads])

另一种选择可能是

^[1-9](?!\d{0,2} ?[a-z])\d{0,3} ?[a-z]{0,2}$(?<!s[ads])

这有一种“实现过度”的味道——问问你自己,你真的需要增加这种复杂性吗?当用户完成输入时,这与仅仅验证整个输入是否正确相比真的会增加很多价值吗?不要在keypress/keydown/keypup上验证。验证onChange。@WiktorStribiżew,除非您正确地侦听事件并使用2个正则表达式,否则将允许用户提交不完整的数据。@TomLord我需要这个作为搜索输入。用户应该能够输入他/她的邮政编码,并立即得到建议,如输入:123建议:1234 AB-Sometone;1235 AC-另一个城市对Wiktor的正则表达式进行了轻微修改,以解释如何使
12r
false:
^[1-9](?:[0-9]{1,3}{[0-9]{3})(?!sa | sd | ss)[a-z]{0,2})$
这有一种“实现过度”的味道——问问自己,你真的需要增加这种复杂性吗?当用户完成输入时,这与仅仅验证整个输入是否正确相比真的会增加很多价值吗?不要在keypress/keydown/keypup上验证。验证onChange。@WiktorStribiżew,除非您正确地侦听事件并使用2个正则表达式,否则将允许用户提交不完整的数据。@TomLord我需要这个作为搜索输入。用户应该能够输入他/她的邮政编码,并立即得到建议,如输入:123建议:1234 AB-Sometone;1235 AC-对Wiktor的正则表达式进行轻微修改,以说明如何使
12r
false:
^[1-9](?:[0-9]{1,3}[0-9]{3}(?!sa | sd | ss)[a-z]{0,2})$