如何使用正则表达式验证百分比保留两位小数?

6

有没有一个正则表达式可以验证百分比值保留两位小数?

我有一个保留两位小数的正则表达式,但是不知道如何阻止超过100的值。例如:100.01会通过我的正则表达式验证。


1
就我个人而言,将图像解析为您使用的任何语言中的float / double,并验证“0 <= x <= 100”。在我看来,正则表达式不是解决这个问题的正确方法。 - Dominic Rodger
当我说“图像”时,我想说的是“百分比”。抱歉。 - Dominic Rodger
我正在使用数据注释正则表达式在MVC应用程序中应用验证。 - littlechris
1
Littlechris,我不确定你是否注意到了DVK答案下面的新评论。但是如果你删除开头和结尾的斜杠,它应该适用于你。 - Steve Wortham
6个回答

11

在 Perl 中:

/(^100([.]0{1,2})?)$|(^\d{1,2}([.]\d{1,2})?)$/

或者您可以添加一个额外的 if 条件来精确比较是否等于100 :)


1
做得很好。它可以使用我的测试用例... http://regexhero.net/tester/?id=6807190b-cc82-4dd4-8864-05ce8c0c3b4f - Steve Wortham
看起来在提供的链接上有效,但无法使其在我的应用程序中工作。使用数据注释的ASP.Net MVC验证:[RegularExpression(@"/(^100([.]0{1,2})?)$|(^\d{1,2}([.]\d{1,2})?)$/")] - littlechris
1
@littlechris - 对不起,我对ASP并不太熟悉。你最初的问题标签并不是特定于.NET。正如所述,这是Perl - 我不确定它在.NET上的可移植性。 - DVK
1
@littlechris - 尝试删除开头和结尾的斜杠。在.NET中应该可以正常工作(这就是Regex Hero正在使用的)。 - Steve Wortham
1
嗯...斜杠是Perl正则表达式运算符。模式位于斜杠之间。对于造成的混淆,我表示抱歉。 - DVK
显示剩余2条评论

2

这使得除零之外的所有百分比都可以使用。

^[1-9]{1}[0-9]?(?:\.\d{1,2})?$|^0\.\d{1,2}?$|100

你应该在表达式末尾添加^100$,而不是100,否则任何包含100的内容都会被视为有效,例如100s.23。 - Fjut

0

试试这个:

\d{1,2}\.\d{2}

这将给你一个一位或两位数字,后面跟着正好两个小数位。如果你想允许十分位(例如10.1),那么可以尝试这个:

\d{1,2}\.\d{1,2}

1
该解决方案缺少值“100”或“100.00”。 - Bryan Oakley
抱歉,我一直在读那个帖子,OP并不想要100.00美元。好吧,也许下次吧... - Tony Miller

0

试试这个(接受0到100之间的任何内容,包括0.00和100.00):

^(100\.00|100\.0|100)|([0-9]{1,2}){0,1}(\.[0-9]{1,2}){0,1}$

0
/^(?:100(?:\.0(?:0)?)?|\d{1,2}(?:\.\d{1,2})?)$/

适用于:

  • 100
  • 100.0
  • 100.00
  • 99.99
  • 0.01
  • 5

等等。


0
^([0-9]{0,2})(.[0-9]{1,2}){0,1}$|^100$

请使用此正则表达式验证 Angular 项目或 JavaScript 项目中的百分比。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接