You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写正则表达式匹配并验证空格分隔的十六进制字节字符串?

嘿,这个需求我太熟了!要验证这种空格分隔的十六进制字节串,咱们可以根据不同的严格程度来写正则,下面给你拆解几种实用方案:

核心规则先搞懂

首先,单个十六进制字节的要求是两位字符,只能是0-9、A-F(或a-f,大小写通常不敏感),对应的正则片段是[0-9A-Fa-f]{2}。在此基础上,我们要保证字节之间用单个空格分隔,首尾不能有多余的空格(或者根据需求放宽)。

严格模式(最常用)

这个模式要求:

  • 首尾不能有空格
  • 每个字节必须是两位十六进制
  • 字节之间只能用单个空格分隔
  • 至少包含一个字节

对应的正则表达式:

^[0-9A-Fa-f]{2}(?: [0-9A-Fa-f]{2})*$

拆解说明:

  • ^:匹配字符串的开头,确保前面没有多余内容
  • [0-9A-Fa-f]{2}:匹配第一个合法的两位十六进制字节
  • (?: [0-9A-Fa-f]{2})*:非捕获组,匹配0次或多次「空格+合法字节」的组合,保证分隔规则正确(用非捕获组(?:...)比捕获组效率更高)
  • $:匹配字符串的结尾,确保后面没有多余内容

宽松模式(允许首尾空格)

如果担心用户输入时不小心在首尾多打了空格(比如A1 B2),可以调整成允许首尾有任意数量空格的版本:

^\s*[0-9A-Fa-f]{2}(?: [0-9A-Fa-f]{2})*\s*$

这里的\s*会匹配0次或多次空白字符(包括空格、制表符),如果只想允许空格,把\s换成 即可:^[ ]*[0-9A-Fa-f]{2}(?: [0-9A-Fa-f]{2})*[ ]*$

强制至少两个字节

如果业务要求必须输入至少两个字节,把正则里的*改成+就行:

^[0-9A-Fa-f]{2}(?: [0-9A-Fa-f]{2})+$

大小写敏感场景

如果要求只能输入大写十六进制(比如只允许A1 B2,不允许a1 b2),去掉小写范围:

^[0-9A-F]{2}(?: [0-9A-F]{2})*$

反之,只允许小写的话:

^[0-9a-f]{2}(?: [0-9a-f]{2})*$
测试用例参考

合法输入:

  • A1 B2 C3
  • FF 00
  • 11(严格模式下允许单个字节)

不合法输入:

  • A1 B2 C(最后一个字节只有1位)
  • A1B2 C3(缺少分隔空格)
  • A1 B2(两个空格分隔)
  • A1 B2 (结尾有空格,严格模式下不合法)

内容的提问来源于stack exchange,提问作者Enix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:45:29