繁体   English   中英

小数或小数的正则表达式模式

[英]Regex Pattern for Decimals or Fraction

我对正则表达式模式感到糟糕。 我正在尝试以整数(1234),十进制(1234.50)或小数(1234 1/2)的形式验证输入(使用C#)。 我目前正在使用此模式

[^ 0-9。] +

仅处理整数和小数。 有没有办法我可以扩展它来处理分数?

您可以使用以下正则表达式:

^\(\d+(?:\.?\d*|\s\d+\/\d+)\)$

工作演示

如果您不想包含括号,可以使用

^\d+(?:\.?\d*|\s\d+\/\d+)$

您可以轻松看到两种十进制/分数模式:

正则表达式可视化

正则表达式是好的,如果你只是希望验证字符串存储输入的string 但是,如果要对数值进行任何运算,最好还是尝试直接解析该值。

string input = "1234 1/2";
decimal? inputAsDec = null;
decimal? fractionAsDec = null;
var wholeAndFraction = input.Split(' ');

if (wholeAndFraction.Count == 2 && input.Contains('/'))
{
    var fraction = wholeAndFraction[1].Split('/');
    decimal? numerator = null;
    decimal? denominator = null;

    if (decimal.TryParse(fraction[0], out numerator) && decimal.TryParse(fraction[1], out denominator))
    {
        fractionAsDec = numerator / denominator;
    }
}

if (decimal.TryParse(wholeAndFraction[0], out inputAsDec))
{
    if (fractionAsDec != null)
    {
        inputAsDec += fractionAsDec;
    }
}

这应该工作:

\d*(?:\s+\d+/\d+|\.\d+)?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM