用于检查数字范围的正则表达式(带小数)

时间:2017-06-28 08:07:31

标签: c# regex numbers

我正在处理一个窗口表单,它接受某些范围的值作为输入。到目前为止,我只能找到020000之间的范围。

(20000|[0-9]|0[1-9]|[1-9]\d{0,3})$

有人可以帮我找到0.020479.0之间的范围(包括小数)吗?

5 个答案:

答案 0 :(得分:1)

正如评论所示,正则表达式在这些情况下远非理想。虽然可以这样做,但会变得非常复杂。

^(?:(?:1?\d{1,4}|20[0-3]\d\d|204[0-6]\d|2047[0-8])(?:\.\d+)?|20479(?:\.0+)?)$

这是使用两个外部替换 - 一个匹配最大数量,可选地任意数量的零作为小数。另一个(第一个)有几个子变量匹配不同数字的最大值,并允许一个可选的小数点和小数。

1?\d{1,4}     Matches 0-19999
20[0-3]\d\d   Matches 20000-20399
204[0-6]\d    Matches 20400-20469
2047[0-8]     Matches 20470-20478

See it here at regex101

答案 1 :(得分:0)

如果您只想要整数(最后的.0),可以试试this

面具

^((1?[0-9]{0,4})|((20(([0-3][0-9]{0,2})|(4[0-7][0-9])))))$

如果最后需要.0,请在\.0之前添加$。如果你需要双精度/小数而不是精度/范围。

答案 2 :(得分:0)

这是一个建议,允许0到20479之间的数字与小数:

^(0?[0-9]{0,4}(?:\.\d+)?|1\d{4}(?:\.\d+)?|20[0-4][0-7][0-8](?:\.\d+)?|20479(?:\.[0-7])?)$

正如您所看到的,它有点复杂,您可能不希望使用正则表达式。

Demo on regex101

<强>解释

  • (0?[0-9]{0,4}(?:\.\d+)?介于0.0和9999.99之间(小数是可选的)
  • 1\d{4}(?:\.\d+)?介于10000.0和19999.99之间(小数是可选的)

  • 20[0-4][0-7][0-8](?:\.\d+)?介于20000.0和2048.99之间(小数是可选的)

  • 20479(?:\.[0-7])?介于20479和20479.7之间

更新:如果没有小数,您可以使用:

^(0?[0-9]{0,4}|1\d{4}|20[0-4][0-7][0-8]|20479$

答案 3 :(得分:0)

为什么要使用一个在使用实际代码时难以维护的正则表达式:

public bool IsValid(string input = "")
{
    double inputParsed;
    if (!double.TryParse(input, out inputParsed))
        return false;

    if(inputParsed < 0 || inputParsed > 20479)
        return false;

    return true;
}

答案 4 :(得分:0)

使用正则表达式在该点之前和之后获得两个数字 然后检查数字以达到范围。

var list = new List<string> { "VB0.0", "VB20479.0", "VB20479.7", "VB20480.0", "VB010000.0", "VB0.8", "VBx.y" };

string pattern = @"(\d+)\.(\d+)";

foreach (var input in list)
{
    var m = Regex.Match(input, pattern);

    if (m.Success)
    {
        string value1 = m.Groups[1].Value;
        string value2 = m.Groups[2].Value;

        bool result = value1.Length <= 5 && int.Parse(value1) <= 20479
                   && value2.Length <= 1 && int.Parse(value2) <= 7;

        Console.WriteLine(result);
    }
    else Console.WriteLine(false);
}