C# 正则表达式模型验证:整数或.25的十进制倍数
我正在尝试编写一个正则表达式,以匹配表示为C# 正则表达式模型验证:整数或.25的十进制倍数,c#,regex,entity-framework,attributes,data-annotations,C#,Regex,Entity Framework,Attributes,Data Annotations,我正在尝试编写一个正则表达式,以匹配表示为.25十进制倍数的数值(例如1.25,14.75) 到目前为止,我有以下表达式:\d+(\((0+)(250*)(50*)(750*)。当我使用在线工具时,它可以工作,比如。当我在验证属性中使用表达式为EntityFramework db种子时,它会产生验证错误: [RegularExpression(@"^\d+(\.((0+)|(250*)|(50*)|(750*)))$", ErrorMessage = "Hours must be 15 minu
.25
十进制倍数的数值(例如1.25
,14.75
)
到目前为止,我有以下表达式:\d+(\((0+)(250*)(50*)(750*)
。当我使用在线工具时,它可以工作,比如。当我在验证属性中使用表达式为EntityFramework db种子时,它会产生验证错误:
[RegularExpression(@"^\d+(\.((0+)|(250*)|(50*)|(750*)))$", ErrorMessage = "Hours must be 15 minute increments expressed as decimals (ex. .0, .25, .5, .75)")]
public double Hours { get; set; }
类似的问题(),但我需要使用正则表达式来使用上述数据注释
问题:
4
或4.25
,但不支持4.
或4.62
),则可获得额外积分若要匹配,请使用正则表达式模式
(?!0\d)\d+(?:[.](?:25|5|75|0)0*)?(?!\d)
^(?!0\d)\d+(?:[.](?:25|5|75|0)0*)?$
要验证输入是否为该数字,请使用正则表达式模式
(?!0\d)\d+(?:[.](?:25|5|75|0)0*)?(?!\d)
^(?!0\d)\d+(?:[.](?:25|5|75|0)0*)?$
在这两种情况下,第一部分
(?!0\d)
是可选的,不允许匹配/验证带有无效前导零的数字,例如000003.250
,此时匹配将对其进行修剪,并只取3.250
;如果正则表达式中存在此可选部分,验证将失败。这也匹配整数:
^\d+(\.(25|5|75|0)0*)?$
我试了一下。它在后台有一个.NET正则表达式引擎。如果您同时使用所有测试用例,请确保选择了
多行
选项,以便^
和$
符号分别匹配每一行,而不是整个文本。为什么在每一个备选项周围都有分组括号?两个问题。。。(1) 将句点字符括在括号中是否有效地对其进行转义(例如[.]
=\.
)?(2) 我理解使用^
和$
来开始和结束表达式,但您是否想在验证示例中省略后面的第三组(?!\d)
?如果是故意的,为什么没有必要呢?@one.beat.consumer-Re(1):是的,[.]
与\.
相同,因为句点不必在集合中转义[]
;Re(2):负前瞻(?!\d)
防止其他不需要的数字位于匹配后面,例如12.750004
中的4
,因为如果没有这种条件,您将获得匹配12.75000
。我想是这样的,那么它可能应该包含在验证字符串中,不是4.250009
应该失败。@one.beat.consumer-为了验证,您在模式末尾有$
,这表示绝对没有落后,因此不需要它。如果您有输入,例如它的成本为12.750美元
,那么您需要使用匹配模式,如果您的输入正好是这样的数字:12.750
,那么您需要使用验证模式。我不知道你在做什么。。。告诉我们你在做什么。你的最后一句话澄清了一切。正如您在问题中看到的,它是一个double
属性-验证模式最合适。非常感谢。