javascript - 寫了一個(gè)驗(yàn)證12.5-20.5的正則老是報(bào)錯(cuò)?
問題描述
要求的數(shù)據(jù)格式為:1101001-510-50100-5000.510.510.5-2010.5-20.510-20.5
也就是要求驗(yàn)證的數(shù)字大小不限,可以有浮點(diǎn)數(shù)可以沒有,可以有“-”可以沒有,保留一位小數(shù)
這是我寫的正則表達(dá)式:
下面的復(fù)制錯(cuò)了:
var a=/^d{1,}.?d?-?(d{1,})?.?d?$/;
更正為:
var a=/^d{1,}.?d{1}?-?(d{1,})?.?d{1}?$/;
但是20.5555一直為true是咋回事?
問題解答
回答1:/^d{1,}.?d?-?(d{1,})?.?d?$/匹配過程如下:首先d{1,}匹配的是'20';.?匹配'.';d?匹配'5',?匹配了1次;-?匹配'',因?yàn)?匹配0或者1次,在這里匹配0次;(d{1,})?匹配'555',此時(shí)?匹配1次;.?d?匹配'',此時(shí)兩個(gè)?都匹配0次;$匹配字符串結(jié)尾,所以'20.5555'可以匹配。
Update1:/^d{1,}.?d{1}?-?(d{1,})?.?d{1}?$/的匹配過程如下:
d{1,}匹配'20';
.?匹配'.';
d{1}?會(huì)首先嘗試匹配一個(gè)數(shù)字,此時(shí)匹配'5',?匹配1次;
-?會(huì)匹配'',此時(shí)?匹配0次;
(d{1,})?匹配'555';
.?匹配'',此時(shí)?匹配0次;
d{1}?匹配'',?匹配0次;d{1}表示數(shù)字重復(fù)一次,所以該正則和d其實(shí)是一樣的,所以更新后的正則表達(dá)式和原先的正則表達(dá)式?jīng)]有區(qū)別。
注:一開始寫的匹配過程有點(diǎn)兒問題,現(xiàn)在已經(jīng)更新。
回答2:const regex = /^d+(?:.d)?(?:-d+(?:.d)?)?$/;const cases = [ '1', '10', '100', '1-5', '10-50', '100-500', '0.5', '10.5', '10.5-20', '10.5-20.5', '10-20.5', '20.5555', '20.5-20.5555'];const r = cases.map(s => regex.test(s));console.log(r);
???為啥要用正則
相關(guān)文章:
1. Docker for Mac 創(chuàng)建的dnsmasq容器連不上/不工作的問題2. html5 - 請(qǐng)問利用font-face定義的字體怎么在canvas里應(yīng)用?3. html - Python2 BeautifulSoup 提取網(wǎng)頁中的表格數(shù)據(jù)及連接4. python - PyCharm里的一個(gè)文件不小心忽略了wx包5. javascript - vuex中子組件無法調(diào)用公共狀態(tài)6. win10 Apache24+PHP8.0,Apache不能正常加載php.ini。7. 小白學(xué)python的問題 關(guān)于%d和%s的區(qū)別8. android - VideoView與百度Map沖突9. javascript - 關(guān)于微信掃一掃的技術(shù)問題10. html5 - css 這種六邊形的邊框怎么畫?
