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

如何在Bash中检查以值、字符串或引用传递的任意定义数字?

解决方案:多类型数字验证实现方案

核心思路

通过正则规则组合+输入类型适配,覆盖所有需求中的数字格式,同时兼容直接值、字符串、变量引用三种输入形式。

各类数字的匹配规则

1. 十进制整数/浮点数(支持./,作为小数分隔符)

匹配普通整数、带小数的浮点数,确保分隔符唯一:

^[-+]?\d+(?:[.,]\d+)?$

2. 十六进制数

匹配0x开头,包含0-9、a-f、A-F的合法十六进制串:

^0x[0-9a-fA-F]+$

3. 八进制数

匹配以0开头的合法八进制数字:

^0[0-7]+$

4. 科学计数法

兼容两种格式:e/E表示法(如52e-14)和*10^表示法(如-2*10^8):

^[-+]?(?:\d+(?:[.,]\d+)?)(?:[eE][-+]?\d+|\*10\^[-+]?\d+)$

5. 自定义基数数字

匹配<base>#n格式,基数范围2-64,数字字符限定为0-9、a-f、A-F:

^(?:[2-9]|[1-5]\d|6[0-4])#[0-9a-fA-F]+$

统一验证函数(Python示例)

以下函数可处理三种输入形式,直接复用或根据你的开发语言调整:

import re

def is_valid_number(input_data):
    # 处理变量引用:这里模拟变量解析逻辑,实际需对接你的变量系统
    if isinstance(input_data, str) and input_data.startswith('$'):
        input_data = _resolve_variable(input_data)
    
    # 统一转为字符串处理
    num_str = str(input_data).strip()
    
    # 组合所有验证规则
    validator = re.compile(
        r'^[-+]?\d+(?:[.,]\d+)?$'
        r'|^0x[0-9a-fA-F]+$'
        r'|^0[0-7]+$'
        r'|^[-+]?(?:\d+(?:[.,]\d+)?)(?:[eE][-+]?\d+|\*10\^[-+]?\d+)$'
        r'|^(?:[2-9]|[1-5]\d|6[0-4])#[0-9a-fA-F]+$'
    )
    
    return validator.match(num_str) is not None

def _resolve_variable(var_ref):
    # 示例:根据变量引用获取对应值,实际需替换为业务逻辑
    var_map = {'$hex_num': '0x1f3', '$custom_base': '32#g7'}
    return var_map.get(var_ref, '')

使用说明

  • 直接传入数值(int/float):自动转为字符串后验证
  • 传入字符串:直接执行正则匹配
  • 传入变量引用:通过_resolve_variable解析为实际值后验证

额外提示

  • 若需要将验证通过的自定义基数数字转为十进制,可基于基数对数字部分做进制转换
  • 科学计数法中的*10^格式,如需计算实际数值,可先替换为e格式再转换
  • 如需支持千位分隔符等扩展场景,可在正则规则中添加对应匹配逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 05:17:18