我已经提出了以下正则表达式来接受.25间隔或四分之一格式的值,如1.25,10.75,11.50,12,13。
正则表达式
^\d+((\.0+)*|(\.250*)|(\.50*)|(\.750*))$
示例
可接受的值 = 0,0.25,0.50,0.75,3,1.25,1.50,1.75,5,10
不接受的值 = 0.15,0.20,0.26,0.30,1.30,1.55
我有以下问题;
1-它不接受.25但接受0.25
2-如何将值限制为最大数量,我希望它最多接受15.5
答案 0 :(得分:6)
在我看来,正则表达式不是这种工作的正确工具。您要接受的所有值都是十进制值,为什么不简单地将输入的值解析为十进制,然后检查它对于您接受的值是否正确?
decimal number;
if (Decimal.TryParse(value, out number))
// Check if you're in the correct range
它会更简单,更容易出错。
答案 1 :(得分:0)
你可以试试这个:
string input = "0, 0.25, 0.50, 0.75, 1 , 1.25 , 1.50, 1.75 0.15, 0.20, 0.26, 0.30, 1.30, 1.55";
double max = double.MinValue;
var result = Regex.Replace(input, @"\b\d\.\d+\b", match =>
{
double d = double.Parse(match.Value);
// do whatever you want
if (d > max)
max = d;
return "";
});
因为正则表达式不支持数学运算
答案 2 :(得分:0)
我认为正则表达式是错误的做法,但是如果你坚持,那么下面应该适合你。
^(\d|1[0-5]?)((\.0+)*|(\.250*)|(\.50*)|(\.750*))$
答案 3 :(得分:0)
它不接受.25,好像你在开头有一个\d+
,这意味着你在"."
之前至少等待一个数字。我认为您可以通过以下\d+
更改(0|1)?[1-5]?
以接受到15。
可以找到正则表达式详细信息here。
答案 4 :(得分:0)
这是错误这样做的方法,但仍然是一个解决方案
^((1[0-4]|[0-9])?(\.(25|5|75)?0*)?|15(\.(25|5)?0*)?)$
Regex r = new Regex("^((1[0-4]|[0-9])?(\\.(25|5|75)?0*)?|15(\\.(25|5)?0*)?)$");
string[] arr = {".25", "17.545", "3.75000","19.5","10.500","0.25"};
foreach(string s in arr) {
if (r.IsMatch(s)) { Console.WriteLine(s); }
}
给出:
.25
3.75000
10.500
0.25
答案 5 :(得分:0)
您可以使用此正则表达式:
^((?:1[0-4]|[0-9])?(?:\.(?:25|5|75))?0*|15(?:\.(?:25|5)?0*)?)$
答案 6 :(得分:0)
^(0|1)?[1-4]?(|\.0+|\.250*|\.50*|\.750*)$
匹配0-14个数字和
做一个|与数字15,15.25,15.50 *匹配以下内容
15(|\.0+|\.250*|\.50*)
最后一个将是
^(((0|1)?[1-4]?(|\.0+|\.250*|\.50*|\.750*)) | (15(|\.0+|\.250*|\.50*)))$