用于验证带有可选空格的字母数字字符串的正则表达式

我一直在研究一个正则表达式,用于使用以下规则验证字母数字字符串:

  1. 四个起始字符必须是数字,最后 两个字符必须是字母。

  2. 空格是可选的,但必须放在两个字符之间,这意味着不允许使用尾随空格。

  3. 如果 不包括空格,则邮政编码的长度必须为6 个字符,如果包括空格,则必须为7 个字符

例如。

  • 第1111章

  • 111 1ZZ

  • 1 111ZZ

  • 1111ZZ

我尝试使用^[0-9]{4}[A-Za-z]{2}$|^(?=[\d|\D]+ [\d|\D]+).{7}$,但这也将9999 1A验证为 TRUE,实际上应该是 FALSE。

任何线索或帮助将不胜感激:)


梦里花落0921
浏览 158回答 3
3回答

繁花如伊

(?=^.{6,7}$)^(([0-9] ?){4}( ?[a-zA-Z]){2})$将匹配第1111章111 1ZZ1 111ZZ1111ZZ第1111章但不是9999 1A11111Z111111111 11 ZZhttps://regex101.com/r/lByOx6/1编辑:解释“积极前瞻”部分:(?=^.{6,7}$)这仅在字符串满足要求时才匹配,但它不会“消耗”字符。. 是任何字符{6,7} 是关于重复如果字符串有 6 个或 7 个字符,则匹配so (?=^.{6,7}$),无论如何然后下面的部分已经“消耗”了字符串,说我想要在开始时重复 4 次数字和可选的空格,在结束时重复 2 次字母和可选的空格。第二部分将接受诸如此类的字符串,1 1 1 1  Z Z但由于这些字符串超过 7 个字符,因此第一部分不会让字符串匹配。

天涯尽头无女友

我建议通过减少所有你似乎不感兴趣的空格来提前简化问题:var candidate = input.replaceAll(/\s/mg, '');那么正则表达式就是:/^\d{4}[A-Za-z]{2}$/但是,如果您需要验证实际上没有前导或尾随空格,您可以提前验证并立即返回否定结果。

沧海一幻觉

另一种选择是检查字符串是否在第一个和最后一个非空白字符之间包含可选空格。然后匹配第一个数字后跟由可选空格分隔的 3 位数字和 2 或 3 倍的字符 a-zA-Z 或空格。使用不区分大小写的匹配:^(?=\S+ ?\S+$)\d(?: ?\d){3}[A-Z ]{2,3}$解释^字符串的开始(?=正面前瞻,断言右边是什么\S+ ?\S+$匹配第一个和最后一个非空白字符之间的可选空格) 关闭前瞻\d(?: ?\d){3}匹配一个数字并重复 3 次可选空格和一个数字[a-zA-Z ]{2,3}匹配 2-3 次字符 a-zA-Z 或空格$字符串结束正则表达式演示
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript