Javascript 正则表达式表示正数,带两个浮点数,不前导零
我需要为数字输入编写验证。Javascript 正则表达式表示正数,带两个浮点数,不前导零,javascript,regex,Javascript,Regex,我需要为数字输入编写验证。 接受的号码: 0,21 0 0,3 78,21 8934 不允许: 00 0323 -1 021尝试模式^(:0,\d\d?|[1-9]\d*(?:,\d\d?|?| 0 |))$ 说明: ^-匹配字符串的开头 (?:…)-非捕获组 0\d\d?-逐字匹配0,,然后匹配一个或两个数字 |-交替(匹配右侧或左侧的图案) [1-9]\d*(?:,\d\d?-匹配非零数字[1-9],然后匹配零个或多个数字\d*,然后可选地(由于末尾的?运算符),\d\d?,所以逗号后跟一个
接受的号码:
0,21
0
0,3
78,21
8934
不允许:
00
0323
-1
021尝试模式
^(:0,\d\d?|[1-9]\d*(?:,\d\d?|?| 0 |))$
说明:
^
-匹配字符串的开头
(?:…)
-非捕获组
0\d\d?
-逐字匹配0,
,然后匹配一个或两个数字
|
-交替(匹配右侧或左侧的图案)
[1-9]\d*(?:,\d\d?
-匹配非零数字[1-9]
,然后匹配零个或多个数字\d*
,然后可选地(由于末尾的?
运算符),\d\d?
,所以逗号后跟一个或两个数字
0
-按字面意思匹配0
(?:…|)
-替换中的最后一个选项匹配空字符串
$
-匹配字符串的结尾
var myArray=['0,21','78,21','8934','00','0323','1','021','0,3','1,3','0'];
for(myArray的变量i)
log(`${i}匹配:${/^(?:0,d\d?|[1-9]\d*(?:,\d\d?)$/.test(i)})代码>这里有一个比regex更可扩展的方法
const-okNum=[“0,21”、“78,21”、“8934”和“]
常数notOk=[“00”,“0323”,“-1”,“021”]
常数validNum=str=>{
if(str.trim()==“”){console.log(str,“empty-ok,passed”);返回true;}
常量num=str.replace(“,”,“)
设testNum=parseFloat(num)
if(testNum validNum(num))
notOk.map(num=>validNum(num))
请包括一个问题。我想你已经尝试过实际编写验证了吗?有什么问题/没有按预期工作吗?请看一个带an的问题。另外,关于这个主题,可能会有一大堆关于SO的旧帖子。这几乎是,但我也需要接受0,2.0,3.0,5。我需要接受0。@Waldemar纠正了这一点,请参阅updateE