【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;
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

√沫影

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值