从字符串中过滤掉非十六进制字符的更好方法是什么?

时间:2015-12-22 19:45:09

标签: c# c++ ascii boolean-logic

我刚刚在我的C#项目上试用了PVS-Studio,它指出了这个函数可以屏蔽有效的十六进制字符。最初逻辑允许所有角色,但在修复它之后,我不能感觉有更好的方法来做到这一点。

    string ValidHex()
    {
        string str = foo.Value;
        for (int index = 0; index < str.Length; index++)
        {
            if (Char.IsDigit(str[index]) == false)
            {
                if ((str[index] >= 'A' && str[index] <= 'F') ||
                    (str[index] >= 'a' && str[index] <= 'f'))
                    continue;
                else
                    return "Invalid Hex value";
            }
        }
        return null;
    }

我知道我无法提高时间复杂度,但筛选这些ASCII值有一种不那么尴尬的方法吗?

1 个答案:

答案 0 :(得分:1)

检查字符串是否为有效十六进制字符串的简单方法是使用十六进制的正则表达式并尝试匹配它。

public bool OnlyHexInString(string test)
{
    // For C-style hex notation (0xFF) you can use @"\A\b(0[xX])?[0-9a-fA-F]+\b\Z"
    return System.Text.RegularExpressions.Regex.IsMatch(test, @"\A\b[0-9a-fA-F]+\b\Z");
}

在此处阅读更多内容:Check a string to see if all characters are hexadecimal values