【QT】将字符串条件转换为一个可以编程检查的条件

字符串的条件转为为程序检查的条件

-1-100、-100–10、1-200 、> -20 、 , 20 等…

判断一个字符串是否为全数字,代码实现如下

// 判断字符串是否为全数字
bool isPureNumber(const QString &str)
{
    // 正则表达式,匹配整数、负数和小数
    // 负号只能出现在字符串开头,小数点只能出现一次,且小数点前后都应该有数字(除非它是字符串的最后一个字符)
    QRegularExpression rx("^(-?\\d+(\\.\\d+)?)$");
    QRegularExpressionMatch match = rx.match(str);

    return match.hasMatch();
}

进行特殊条件的校验,代码实现如下

bool checkMatch(QString &condition, QString &valueToCheck)
{
    // 正则表达式: 提取字符串中的数字,将非数字的字符去掉,并且保留小数
    QRegExp regex("[^\\d.]+");

    // 处理 > 运算符
    if (condition.startsWith(">"))
    {
        float condValue = condition.contains("-") ? -condition.replace(regex, "").toFloat() : condition.replace(regex, "").toFloat();
        float checkValue = isPureNumber(valueToCheck) ? valueToCheck.replace(regex, "").toFloat() : -valueToCheck.replace(regex, "").toFloat();

        return checkValue > condValue;
    }
    // 处理 < 运算符
    else if (condition.startsWith("<"))
    {
        float condValue = condition.contains("-") ? -condition.replace(regex, "").toFloat() : condition.replace(regex, "").toFloat();
        float checkValue = isPureNumber(valueToCheck) ? valueToCheck.replace(regex, "").toFloat() : -valueToCheck.replace(regex, "").toFloat();

        return checkValue < condValue;
    }
    // 处理范围运算
    else if (condition.contains("-"))
    {
        // 处理特殊范围 -1-100、-100--10、1-200 的判断值
        if (condition.startsWith("-"))
        {
            // 开始为“-”:则分割的位置为第二个“-”
            int dashIndex = condition.indexOf('-', 1);
            QString lowerBound = condition.left(dashIndex);
            QString upperBound = condition.mid(dashIndex + 1);

            float lCondValue = -lowerBound.replace(regex, "").toFloat();                                                                     // 上边界
            float uCndValue = upperBound.contains("-") ? -upperBound.replace(regex, "").toFloat() : upperBound.replace(regex, "").toFloat(); // 下边界
            float checkValue = isPureNumber(valueToCheck) ? valueToCheck.replace(regex, "").toFloat() : -valueToCheck.replace(regex, "").toFloat();

            return checkValue >= lCondValue && checkValue <= uCndValue;
        }
        else
        {
            // 开始不为“-”:则分割的位置为第一个“-”
            int dashIndex = condition.indexOf('-');
            QString lowerBound = condition.left(dashIndex);
            QString upperBound = condition.mid(dashIndex + 1);

            float lCondValue = lowerBound.replace(regex, "").toFloat(); // 上边界
            float uCndValue = upperBound.replace(regex, "").toFloat();  // 下边界 上边界为整数,下边界肯定大于零
            float checkValue = isPureNumber(valueToCheck) ? valueToCheck.replace(regex, "").toFloat() : -valueToCheck.replace(regex, "").toFloat();

            return checkValue >= lCondValue && checkValue <= uCndValue;
        }
    }

    return false;
}

在校验时,默认条件是符合逻辑的,不会出现非常规的条件

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-07 15:38:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-07 15:38:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-07 15:38:01       87 阅读
  4. Python语言-面向对象

    2024-06-07 15:38:01       96 阅读

热门阅读

  1. 酒茶元宇宙 - 探索味觉与科技的融合奇迹

    2024-06-07 15:38:01       32 阅读
  2. DALL-E 2之学习心得

    2024-06-07 15:38:01       29 阅读
  3. python如何提取html中所有中文

    2024-06-07 15:38:01       25 阅读
  4. module ‘sys‘ has no attribute ‘setdefaultencoding‘

    2024-06-07 15:38:01       28 阅读
  5. linux系统登录达梦数据库

    2024-06-07 15:38:01       25 阅读
  6. 【Qt】styleSheet设置

    2024-06-07 15:38:01       20 阅读
  7. centos使用docker快速安装nginx

    2024-06-07 15:38:01       32 阅读
  8. 8255A-LED

    2024-06-07 15:38:01       20 阅读
  9. SHA256计算原理

    2024-06-07 15:38:01       31 阅读
  10. HTML5 Canvas 绘图教程一

    2024-06-07 15:38:01       32 阅读
  11. oslo_rootwrap学习小结

    2024-06-07 15:38:01       29 阅读