javascript - 寫了一個驗證12.5-20.5的正則老是報錯?
問題描述
要求的數據格式為:1101001-510-50100-5000.510.510.5-2010.5-20.510-20.5
也就是要求驗證的數字大小不限,可以有浮點數可以沒有,可以有“-”可以沒有,保留一位小數
這是我寫的正則表達式:
下面的復制錯了:
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次;-?匹配'',因為?匹配0或者1次,在這里匹配0次;(d{1,})?匹配'555',此時?匹配1次;.?d?匹配'',此時兩個?都匹配0次;$匹配字符串結尾,所以'20.5555'可以匹配。
Update1:/^d{1,}.?d{1}?-?(d{1,})?.?d{1}?$/的匹配過程如下:
d{1,}匹配'20';
.?匹配'.';
d{1}?會首先嘗試匹配一個數字,此時匹配'5',?匹配1次;
-?會匹配'',此時?匹配0次;
(d{1,})?匹配'555';
.?匹配'',此時?匹配0次;
d{1}?匹配'',?匹配0次;d{1}表示數字重復一次,所以該正則和d其實是一樣的,所以更新后的正則表達式和原先的正則表達式沒有區別。
注:一開始寫的匹配過程有點兒問題,現在已經更新。
回答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);
???為啥要用正則
相關文章:
1. javascript - js 有什么優雅的辦法實現在同時打開的兩個標簽頁間相互通信?2. css3 - Typecho 后臺部分表單按鈕在 Chrome 下出現靈異動畫問題,求解決3. javascript - angular和jquery都用到了$符號,一起用會不會沖突?4. javascript - 怎樣限制同一個瀏覽器不能登錄兩個賬號5. 想找個php大神仿個網站。6. java - android代碼重構:如何把app設置里的頭像UI做成通用的?7. java - 新手做一個安卓視頻播放器,想實現一個進度條,按鈕那種在視頻下方懸浮的功能,不知道思路!8. javascript - jquery怎么給select option一個點擊時觸發的事件,如圖 如果選擇自定義觸發一個時間?9. nginx配置server模塊的問題10. mysql優化 - 關于mysql分區
