Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript百分比验证_Javascript_Regex - Fatal编程技术网

Javascript百分比验证

Javascript百分比验证,javascript,regex,Javascript,Regex,我在寻找一个正则表达式,它验证0到100之间的百分比,并允许两位小数 有没有人知道如何做到这一点,或者知道有一个好的网站有javascript中用于客户端验证的公共正则表达式的示例 @汤姆-谢谢你的提问。理想情况下,不会有前导0或其他尾随字符 感谢所有到目前为止已经回复的人。我发现这些评论真的很有趣 (100 |[0-9]{1,2})(\[0-9]{1,2}) 那应该是你想要的正则表达式。我建议您阅读Mastering Regular Expression并下载RegexBuddy或Regex

我在寻找一个正则表达式,它验证0到100之间的百分比,并允许两位小数

有没有人知道如何做到这一点,或者知道有一个好的网站有javascript中用于客户端验证的公共正则表达式的示例

@汤姆-谢谢你的提问。理想情况下,不会有前导0或其他尾随字符

感谢所有到目前为止已经回复的人。我发现这些评论真的很有趣

(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(名人)的故事,他在其中讲述了以下故事:

“一位客户要求我建立并安装一个定制的货架系统。我现在需要钉上它,但我不知道用什么来钉。我应该用旧鞋还是玻璃瓶?”

你如何回答这个问题

  • 视情况而定。如果你想在干墙之类的东西上钉一个小钉子(20磅),你会发现使用瓶子要容易得多,尤其是鞋子脏的时候。然而,如果你想把一颗沉重的钉子钉进木头里,就穿上鞋子:手里拿着破碎的瓶子

  • 你的建筑方式有一些根本性的问题;你需要使用真正的工具。是的,它可能涉及到一次工具箱之旅(甚至是硬件商店),但正确的方法将在产品的整个生命周期中节省大量的时间、金钱和麻烦。在你了解建筑的基本原理之前,你需要停止为钱而建筑

  • 在这个问题上,大多数人认为找到正确的正则表达式来解决这个问题是一个挑战,但是如果说使用正则表达式是在使用错误的工具来完成工作,那就更好了

    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})?)