正则表达式的基础内容我就不在此进行赘述,不懂的小伙伴们请自行Google。废话不多说,直接上正题:
我现在要验证一个10以内(包括10)的数字,最多保留2位有效数字,但是不能以0打头,可以是0.00。
那么:^((10)|[0-9])(\.\d{1,2})?$
我们到图形化正则表达式的网站上测试一下。
https://regexper.com/,在此把链接贴出来,大家可以自行测试。
图形化工具告诉我们,我们的正则表达式可以匹配10或者0-9的一个数字再加上可能出现的小数点加有效数字。
我在此直接把我在控制台中的测试结果打出来:
这就要说说有g跟没有g的区别了,g代表全局搜索,js引擎在匹配的时候,会记录上一次匹配的位置,这个参数叫lastIndex,第一次的时候lastIndex为0,当有匹配的时候,就记住第一次匹配的位置。也就是说,你以为你验证的是一个数字,而js引擎看到的字符串模板可能就是乱七八糟的了(至于这个lastIndex,有兴趣的同学请移步Google) 。而对于不带全局搜索的正则表达式,它的lastIndex一直是0,这样就避免了同一个正则,执行的次数不同结果不同。
那么,最后我们回到开发场景:
现在,我有一个input框,我需要用户输入一个10以内的数字,最多保留2位有效数字,而对应的正则大体(有的同学写出来的不一致)应该是: /^((10)|[0-9])(\.\d{1,2})$/
结语: 一个小坑,化解了我很久的困惑,希望能帮到大家。