正則多次呼叫test 返回的值卻不同 md

2021-10-02 20:27:21 字數 1047 閱讀 9924

在解決多埠的單項驗證時,需要將以逗號分隔的埠切割為陣列。對陣列進行遍歷正則判斷

問題**如下

let value =$(

"input").

val();

let ports = value.

split

(",");

let flag =

true

;let exp =

/^(\d)+$/g

;ports.

foreach

((port)

=>}}

);return flag;

**說明

1 - 對使用者輸入的多埠資料進行分割,分割為陣列

2 - 定義數字驗證的正規表示式/^(\d)+$/g,使用g的目的是進行全域性匹配

3 - 對單埠進行埠規則驗證:必須為0-65535之間的純數字

執**況

輸入的第乙個埠為true,第二個埠後為false,即當分隔到的陣列長度大於1時返回的資料為false,導致驗證無法通過

原因解析

g表示全域性匹配,會記錄乙個lastindex,當第一次使用test()時,lastindex為當前字串最後乙個字元的索引。第二次使用test()時,lastindex由上次的索引值繼續向下,所以為false

測試**

方案一

在使用迴圈多次匹配時取消g的使用,直接使用正則去匹配

方案二

每執行一次test()後重置一次lastindex的值

js相同的正則多次呼叫test 返回的值卻不同

專案中檔案上傳需要驗證檔案的格式,第一次正常,第二次就驗證不通過了。在驗證的地方console.log 兩遍,發現結果不一樣 正則和檔名都沒變,但是兩次的驗證結果不同。this.reg xlsx xls ig console.log this reg.test newfile.name true c...

generator 生成器可以返回多次值的函式

一般的函式只有一次返回值 但是我們的generator可以給我們返回多次 做乙個簡單的相親網demo會更明白一些 1.generator的結構為 function numbers 然後乙個生成器 const gen numbers gen並不是像es5中為乙個方法,這裡列印並不需要 console....

遞迴呼叫的返回值

在這之前我不少用遞迴函式,但一直沒有真正弄明白遞迴函式的返回值的原理,為了更好的說明問題我寫乙個平衡二叉樹演算法利用遞迴演算法查詢值的原始碼如下 package com.cph.interviwe public class node public node public boolean store ...