我正在尝试使用正则表达式来匹配表示为.25
的十进制倍数的数值(例如1.25
,14.75
)。
// Must Match
1.0
1.25
1.250000
1.5
1.500
1.75
1.7500
// Must Not Match
1.2
1.46
1.501
1.99
到目前为止,我有以下表达式:\d+(\.((0+)|(250*)|(50*)|(750*)))
。当我使用gskinner.com/regexr等在线工具时,它可以正常工作。当我使用验证属性中的表达式来为我的EntityFramework数据库生成种子时,它会产生验证错误:
[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; }
类似的问题(I am looking for a way to round the decimal portion of numbers up or down to the nearest .25, .5, .75, or whole number)但我需要使用正则表达式来使用上面的数据注释。
有人看到我的表情有什么问题吗?
奖励积分,如果您可以将其扩展为支持整数(例如4
或4.25
但不4.
或4.62
)
答案 0 :(得分:1)
匹配此类号码使用正则表达式
(?!0\d)\d+(?:[.](?:25|5|75|0)0*)?(?!\d)
要验证输入为此号码,请使用正则表达式
^(?!0\d)\d+(?:[.](?:25|5|75|0)0*)?$
在这两种情况下,第一部分(?!0\d)
是可选的,以禁止匹配/验证数字与无效的前导零,例如000003.250
,当匹配将修剪它们并仅采用3.250
;如果正则表达式中存在此可选部分,验证将失败。
答案 1 :(得分:1)
这也符合整数:
^\d+(\.(25|5|75|0)0*)?$
我用RegexHero测试了它。它在后台有一个.NET Regex引擎。如果您同时使用所有测试用例,请确保选中Multiline
选项,以便^
和$
符号分别与每一行匹配,而不是整个文本。< / p>