Javascript百分比验证
我在寻找一个正则表达式,它验证0到100之间的百分比,并允许两位小数 有没有人知道如何做到这一点,或者知道有一个好的网站有javascript中用于客户端验证的公共正则表达式的示例 @汤姆-谢谢你的提问。理想情况下,不会有前导0或其他尾随字符 感谢所有到目前为止已经回复的人。我发现这些评论真的很有趣Javascript百分比验证,javascript,regex,Javascript,Regex,我在寻找一个正则表达式,它验证0到100之间的百分比,并允许两位小数 有没有人知道如何做到这一点,或者知道有一个好的网站有javascript中用于客户端验证的公共正则表达式的示例 @汤姆-谢谢你的提问。理想情况下,不会有前导0或其他尾随字符 感谢所有到目前为止已经回复的人。我发现这些评论真的很有趣 (100 |[0-9]{1,2})(\[0-9]{1,2}) 那应该是你想要的正则表达式。我建议您阅读Mastering Regular Expression并下载RegexBuddy或Regex
(100 |[0-9]{1,2})(\[0-9]{1,2})
那应该是你想要的正则表达式。我建议您阅读Mastering Regular Expression并下载RegexBuddy或Regex Coach。因为您的值是str
str.match(/^(100(\.0{1,2})?|([0-9]?[0-9](\.[0-9]{1,2})))$/)
与其使用正则表达式,我只需将用户输入的数字转换为浮点值,然后检查所需的范围(0到100)。尝试使用正则表达式进行数值范围验证几乎总是一个错误的工具
var x = parseFloat(str);
if (isNaN(x) || x < 0 || x > 100) {
// value is out of range
}
var x=parseFloat(str);
如果(isNaN(x)| | x<0 | | x>100){
//值超出范围
}
我建议:
(^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})?$
注意什么前导零是禁止的,但尾随零是允许的(尽管不超过两位小数)
这将匹配:100.00
可选的“1-9”后跟一个数字(这构成int部分),可选的后跟一个点和两个数字
据我所见,Greg Hewgill的示例并没有真正起到很好的作用,因为parseFloat('15x')只返回15,与0相匹配,这让我想起了Alex Papadimoulis(名人)的故事,他在其中讲述了以下故事: “一位客户要求我建立并安装一个定制的货架系统。我现在需要钉上它,但我不知道用什么来钉。我应该用旧鞋还是玻璃瓶?” 你如何回答这个问题
var x = parseFloat(str);
if (isNaN(x) || x < 0 || x > 100) {
// value is out of range
}
尝试使用正则表达式验证数值范围时的问题是,如果允许范围的要求发生更改,则很难更改。今天的要求可能是验证0到100之间的数字,并且可以为那些不会让你的眼睛流血的数字编写正则表达式。但下周要求可能会改变,因此允许值介于0和315之间。祝你好运改变你的正则表达式
Greg Hewgill给出的解决方案可能更好——尽管它将“99fxx”验证为“99”。但考虑到实际情况可能还可以。@mlarsen:
这里的正则表达式不会做得更好
请记住,验证msut必须在客户端和服务器端都进行,因此类似于:
100|(([1-9][0-9])|[0-9])(\.(([0-9][1-9])|[1-9]))?
这将是一种跨语言检查,请注意检查输入长度与输出匹配长度。如果您不是专门为英语用户开发的,我建议您:
[0-9]{1,2}((,|\.)[0-9]{1,10})?%?
您只需将10替换为2即可获得两位小数
^100(\.(0){0,2})?$|^([1-9]?[0-9])(\.(\d{0,2}))?\%$
我的示例将匹配:
15.5
5.4366%
1,43
50,55%
34
45%
当然,这一个的输出很难强制转换,但是类似这样的东西就可以了(Java代码):
上面的解决方案对我都不起作用,因为我需要我的正则表达式,以便在用户键入ex:'18'时,允许使用带数字和小数的值 这个解决方案允许一个空字符串,这样用户就可以删除他们的全部输入,并解释上面阐述的其他规则
/(^$)|(^100(\.0{1,2})$)|(^([1-9]([0-9])?| 0)\(\[0-9]{1,2})$)|(^([1-9]([0-9])?| 0)(\[0-9]{1,2})$)/
100.10将被匹配,不应匹配05.50%,这有点奇怪。不允许使用前导和尾随的0。嗯,可能不允许只使用前导的0。与5.5%相比,5.50%并非毫无意义。不幸的是,此正则表达式与5或15 i不匹配。E没有小数位数的数字。似乎,编写正确的正则表达式通常就像解决一个难题——不必要,但很有挑战性。很好,当x的小数位数超过2时,它不会进行检查,检查起来很简单,类似这样:var decseptor=“.”;if(“”+x).indexOf(decseptor)mmm,对不起,在上面发布的代码中我忘记了一个片段XD,正确的例子是:var decimalSeparator=“.”,val=“+x;if(val.indexOf(decimalSeparator)当然,如果文本字段中允许,您可能需要删除百分号。我使用了此逻辑,但确定它是否有百分号,然后将其删除,然后进行测试,然后将其添加回原来的位置。将匹配字符串,如“1.”、“95.”、“100”可能应该更正正则表达式。现在您有了一个符合此要求的正则表达式。一周后,要求发生了变化,所以现在您的正则表达式应该匹配0到255之间的值。祝您好运更改您的正则表达式,并使其在以后可读。是的,这是正确的,这一点很好,但在任何情况下都有缺点,所以这只是一个问题你想做什么…你看,我通常把regex放在配置文件中,所以如果
(100(\.(0){1,2})?|([1-9]{1}|[0-9]{2})(\.[0-9]{1,2})?)