JS正則驗證數字格式2

之前的博文:JS驗證正數字,正則的一種正數規則1,中isNaN可以判斷內容是否爲數字,但是這種判斷出來的數字,有的不是數字的標準格式。那篇博文中嘗試了下用正則驗證,但是忘了一種情況,小數點後無數字,小數點後跟着的內容應該是+一個或多個,而不是*零個一個或多個,小數點後無數字不符合要求。
而且測試的幾種情況把0忘了,0後面緊跟着小數點,但是還有單獨的0也算是數字。
寫了幾個數字組成應該匹配到的,和不該匹配到的情況,並根據測試情況逐步修改。

個人目前想到的情況:
應該匹配到的情況:
0(一位0)
5(一位數
7068404(一位或多位正整數)
-23403(負數開頭的正整數)
0.3504(零和點開頭的小數)
405.3803(不是零開頭的小數)
不該匹配到的情況
09456(零開頭的第二位不是點的數)
-0345(負號後面緊跟着零,零的第二位不是點的數)
3403.(點後面沒有數字跟着)
a345.46d(前後有非數字)
0..456(有多個小數點)
-0(負的單獨的0似乎也沒有意義)

修改版本1:
如圖,是修改後的表達式,負號可以有零個或一個,後面的分了兩種情況:
1.以非零開頭,1-9開頭,後面可跟着任意數量數字,然後跟着一個點(零個或一個),後面再跟着任意數字。
匹配非零開頭的整數和小數
2.以零開頭,後面緊跟着小數點(一個或零個),後面跟着任意數字(一個或多個,不能沒有)。

相比於前一個博文,加的內容:
(1)第一位可以是負號(零個或一個)
(2)兩種情況的點後面有數字(一個或多個)

測試結果:
這種情況在上面列出的中有兩種情況匹配不到,數字0和數字5,
根據 表達式,讓小數點後必須跟着至少一位數字,而小數點是一個或零個,可有可無,所以造成了無法匹配到一位數字的情況。
小數點可有可無,第一位是1-9中的一個,第二位是0-9一個或多個,這樣就限制了第一種情況至少兩位數字。
且表達式限制了0後面必須緊跟着小數點,所以也匹配不到0。

修改版本2(目前最終版):
分情況:
1.分了四種情況,都用括號括起來,並用|或分割,修改版本2裏的兩種情況,再加上0和單正負個位數,共四種情況 。
所有的括號括起來,
測試結果:
上面列出的這些應該匹配到的,和不該匹配到的都正常了。

由於寫正則需要考慮到各種情況,該文上面的列出的幾種情況匹配到了,不排除有其他情況

測試代碼:(這是修改版本2的)

console.log("----------應該匹配到的----------");
       console.log("0,結果:"+/^((-?[1-9])|0|(-?[1-9]\d*\.?\d+)|(0\.\d+))$/.test("0"));
       console.log("5,結果:"+/^((-?[1-9])|0|(-?[1-9]\d*\.?\d+)|(0\.\d+))$/.test("5"));
       console.log("7068404,結果:"+/^((-?[1-9])|0|(-?[1-9]\d*\.?\d+)|(0\.\d+))$/.test("7068404"));
       console.log("-23403,結果:"+/^((-?[1-9])|0|(-?[1-9]\d*\.?\d+)|(0\.\d+))$/.test("-23403"));
       console.log("0.3504,結果:"+/^((-?[1-9])|0|(-?[1-9]\d*\.?\d+)|(0\.\d+))$/.test("0.3504"));
       console.log("405.3803,結果:"+/^((-?[1-9])|0|(-?[1-9]\d*\.?\d+)|(0\.\d+))$/.test("405.3803"));
       console.log("----------不該匹配到的----------");
       console.log("09456,結果:"+/^((-?[1-9])|0|(-?[1-9]\d*\.?\d+)|(0\.\d+))$/.test("09456"));
       console.log("-0345,結果:"+/^((-?[1-9])|0|(-?[1-9]\d*\.?\d+)|(0\.\d+))$/.test("-0345"));
       console.log("3403.,結果:"+/^((-?[1-9])|0|(-?[1-9]\d*\.?\d+)|(0\.\d+))$/.test("3403."));
       console.log("a345.46d,結果:"+/^((-?[1-9])|0|(-?[1-9]\d*\.?\d+)|(0\.\d+))$/.test("a345.46d"));
       console.log("0..456,結果:"+/^((-?[1-9])|0|(-?[1-9]\d*\.?\d+)|(0\.\d+))$/.test("0..456"));

圖示:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章