我正在使用一个正则表达式来验证从0到100的百分比并允许两个小数位.
有没有人知道如何做到这一点或知道有良好的网站,其中有常见的正则表达式的例子用于javascript中的客户端验证?
@Tom - 感谢您的提问.理想情况下,没有前导0或其他尾随字符.
感谢所有到目前为止回复的人.我发现这些评论非常有趣.
我不是将正则表达式用于此,而是将用户输入的数字转换为浮点值,然后检查所需的范围(0到100).尝试使用正则表达式进行数值范围验证几乎总是错误的工具.
var x = parseFloat(str); if (isNaN(x) || x < 0 || x > 100) { // value is out of range }
我提出这个:
(^100(\.0{1,2})?$)|(^([1-9]([0-9])?|0)(\.[0-9]{1,2})?$)
它使用此部分匹配100,100.0和100.00
^100(\.0{1,2})?$
和数字,如0,15,99,3.1,21.67使用
^([1-9]([0-9])?|0)(\.[0-9]{1,2})?$
请注意禁止前导零,但允许尾随零(但不超过两位小数).
这让我想起了一篇老博客:Alex Papadimoulis(The Daily WTF成名),他讲述了以下故事:
"一位客户要我建造并安装一个定制的搁架系统.我正处于需要钉钉的地步,但我不知道该用什么来钉入钉子.我应该使用旧鞋子还是一个玻璃瓶?"
你会如何回答这个问题?
这取决于.如果你想在干墙上砸一个小的(20磅)钉子,你会发现使用瓶子更容易,特别是如果鞋子很脏的话.但是,如果你试图将一个沉重的钉子钉入一些木头,那么请选择鞋子:手中的碎瓶.
你的建筑方式存在根本性的错误; 你需要使用真正的工具.是的,它可能涉及到工具箱(甚至是硬件商店)的旅行,但以正确的方式这样做会在产品的生命周期中节省大量的时间,金钱和恶化.在了解施工基础知识之前,您需要停止建设物资.
这是一个问题,大多数人认为提出正确的正则表达式来解决问题是一个挑战,但是说使用正则表达式使用错误的工具进行工作会好得多.
尝试使用正则表达式验证数值范围时的问题是,如果允许范围的要求发生更改,则很难更改.今天的要求可能是验证0到100之间的数字,并且可以为不会让你的眼睛流血的那个写一个正则表达式.但下周的要求可能会发生变化,因此允许0到315之间的值.好运改变你的正则表达式.
Greg Hewgill给出的解决方案可能更好 - 尽管它会将"99fxx"验证为"99".但考虑到可能确实存在的情况.