我对正则表达式模式很糟糕。我试图以整数(1234),十进制(1234.50)或分数(1234 1/2)的形式验证输入(使用C#)。我目前正在使用这种模式
[^ 0-9。] +
仅处理整数和小数。有没有办法可以扩展它来处理分数?
答案 0 :(得分:3)
您可以使用这样的正则表达式:
^\(\d+(?:\.?\d*|\s\d+\/\d+)\)$
<强> Working demo 强>
如果您不想包含括号,可以使用
^\d+(?:\.?\d*|\s\d+\/\d+)$
您可以轻松查看小数/分数模式:
答案 1 :(得分:0)
如果您只是想要验证字符串并将输入存储为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;
}
}
答案 2 :(得分:-1)
这应该有效:
\d*(?:\s+\d+/\d+|\.\d+)?