javascript - 寫(xiě)了一個(gè)驗(yàn)證12.5-20.5的正則老是報(bào)錯(cuò)?
問(wèn)題描述
要求的數(shù)據(jù)格式為:1101001-510-50100-5000.510.510.5-2010.5-20.510-20.5
也就是要求驗(yàn)證的數(shù)字大小不限,可以有浮點(diǎn)數(shù)可以沒(méi)有,可以有“-”可以沒(méi)有,保留一位小數(shù)
這是我寫(xiě)的正則表達(dá)式:
下面的復(fù)制錯(cuò)了:
var a=/^d{1,}.?d?-?(d{1,})?.?d?$/;
更正為:
var a=/^d{1,}.?d{1}?-?(d{1,})?.?d{1}?$/;
但是20.5555一直為true是咋回事?
問(wèn)題解答
回答1:/^d{1,}.?d?-?(d{1,})?.?d?$/匹配過(guò)程如下:首先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}?$/的匹配過(guò)程如下:
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ū)別。
注:一開(kāi)始寫(xiě)的匹配過(guò)程有點(diǎn)兒?jiǎ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. javascript - sublime快鍵鍵問(wèn)題2. boot2docker無(wú)法啟動(dòng)3. javascript - 移動(dòng)端上不能實(shí)現(xiàn)拖拽布局嗎?4. 實(shí)現(xiàn)bing搜索工具urlAPI提交5. angular.js - 單頁(yè)應(yīng)用(ng/vue)該如何監(jiān)聽(tīng)用戶(hù)離開(kāi)當(dāng)前頁(yè)面(或者路由)?6. thinkPHP5中獲取數(shù)據(jù)庫(kù)數(shù)據(jù)后默認(rèn)選中下拉框的值,傳遞到后臺(tái)消失不見(jiàn)。有圖有代碼,希望有人幫忙7. javascript - react native在run-android時(shí)出現(xiàn)這個(gè)錯(cuò)誤該怎么解決?大神賜教8. nginx bind failed9. javascript - 如何判斷不同兩個(gè)對(duì)象觸發(fā)同一事件?10. c++ - QWebEngineView加載url后直接點(diǎn)擊鏈接沒(méi)有反應(yīng)要怎么解決?

網(wǎng)公網(wǎng)安備