为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

梦里花落0921 2023-05-25 15:45:00
我一直在研究一个正则表达式,用于使用以下规则验证字母数字字符串:前四个起始字符必须是数字,最后 两个字符必须是字母。空格是可选的,但必须放在两个字符之间,这意味着不允许使用尾随空格。如果 不包括空格,则邮政编码的长度必须为6 个字符,如果包括空格,则必须为7 个字符。例如。第1111章111 1ZZ1 111ZZ1111ZZ我尝试使用^[0-9]{4}[A-Za-z]{2}$|^(?=[\d|\D]+ [\d|\D]+).{7}$,但这也将9999 1A验证为 TRUE,实际上应该是 FALSE。任何线索或帮助将不胜感激:)
查看完整描述

3 回答

?
繁花如伊

TA贡献2012条经验 获得超12个赞

(?=^.{6,7}$)^(([0-9] ?){4}( ?[a-zA-Z]){2})$

将匹配

  • 第1111章

  • 111 1ZZ

  • 1 111ZZ

  • 1111ZZ

  • 第1111章

但不是

  • 9999 1A

  • 11111Z

  • 1111111

  • 11 11 ZZ

https://regex101.com/r/lByOx6/1

编辑:解释

“积极前瞻”部分:

  • (?=^.{6,7}$)这仅在字符串满足要求时才匹配,但它不会“消耗”字符。

    • . 是任何字符

    • {6,7} 是关于重复

如果字符串有 6 个或 7 个字符,则匹配so (?=^.{6,7}$),无论如何

然后下面的部分已经“消耗”了字符串,说我想要在开始时重复 4 次数字和可选的空格,在结束时重复 2 次字母和可选的空格。第二部分将接受诸如此类的字符串,1 1 1 1  Z Z但由于这些字符串超过 7 个字符,因此第一部分不会让字符串匹配。


查看完整回答
反对 回复 2023-05-25
?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

我建议通过减少所有你似乎不感兴趣的空格来提前简化问题:

var candidate = input.replaceAll(/\s/mg, '');

那么正则表达式就是:/^\d{4}[A-Za-z]{2}$/

但是,如果您需要验证实际上没有前导或尾随空格,您可以提前验证并立即返回否定结果。


查看完整回答
反对 回复 2023-05-25
?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

另一种选择是检查字符串是否在第一个和最后一个非空白字符之间包含可选空格。

然后匹配第一个数字后跟由可选空格分隔的 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 或空格

  • $字符串结束

正则表达式演示


查看完整回答
反对 回复 2023-05-25
  • 3 回答
  • 0 关注
  • 112 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信