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
    属性-验证模式最合适。非常感谢。