如何编写正则表达式匹配并验证空格分隔的十六进制字节字符串?
嘿,这个需求我太熟了!要验证这种空格分隔的十六进制字节串,咱们可以根据不同的严格程度来写正则,下面给你拆解几种实用方案:
核心规则先搞懂
首先,单个十六进制字节的要求是两位字符,只能是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 C3FF 0011(严格模式下允许单个字节)
不合法输入:
A1 B2 C(最后一个字节只有1位)A1B2 C3(缺少分隔空格)A1 B2(两个空格分隔)A1 B2(结尾有空格,严格模式下不合法)
内容的提问来源于stack exchange,提问作者Enix
相关产品推荐
相关产品推荐

