建立示例專案考察如下場景,我們有個輸入框元件,輸入時同時進行校驗。 interface IInputProps {
label: string;
}
function Input({ label }: IInputProps) {
const [err, setErr] = useState<string | undefined>();
return (
<section>
{label}:
<input
type="text"
onChange={(event) => {
setErr(rulePassword(event.currentTarget.value));
}}
/>
<p>validate result:{err}</p>
</section>
);
}
進行校驗的邏輯使用了正則來測試: const passwrodReg = new RegExp(
// eslint-disable-next-line no-useless-escape
/(?!^(\d+|[a-zA-Z]+|[_\+\-=!@#\$%\^\*\(\)]+)$)^[\w_\+\-=!@#\$%\^\*\(\)]{8,64}$/,
"gm"
);
export const rulePassword = (value: string) => {
const result = passwrodReg.test(value);
console.log(`input:${value} result:${result}`);
return result ? "✅" : "❌";
};
通常,如果是密碼輸入框,很自然地我們會放置兩個這樣的輸入框以讓使用者確保密碼的一致性: function App() {
return (
<div className="App">
<Input label="密碼" />
<Input label="確認密碼" />
</div>
);
}
對於相同的輸入正則測試結果出現偏差到此,示例寫完了,執行後發現個詭譎的問題,如下圖 GIF 中所展示:
同時,從控制檯列印的日誌也可重現上面的現象:
即,對於同樣的輸入 修正當我們對校驗部分的邏輯做如下變更後這個問題得以解決。 - const passwrodReg = new RegExp(
- // eslint-disable-next-line no-useless-escape
- /(?!^(\d+|[a-zA-Z]+|[_\+\-=!@#\$%\^\*\(\)]+)$)^[\w_\+\-=!@#\$%\^\*\(\)]{8,64}$/,
- "gm"
- );
export const rulePassword = (value: string) => {
+ const passwrodReg = new RegExp(
+ // eslint-disable-next-line no-useless-escape
+ /(?!^(\d+|[a-zA-Z]+|[_\+\-=!@#\$%\^\*\(\)]+)$)^[\w_\+\-=!@#\$%\^\*\(\)]{8,64}$/,
+ "gm"
+ );
const result = passwrodReg.test(value);
console.log(`input:${value} result:${result}`);
return result ? "✅" : "❌";
};
所以,一定是 原因通過檢視 MDN 文件發現, 並且,
當配合 這就解釋了為什麼對於相同的輸入,第一次匹配成功後,後面則失敗了。 而當我們每次匹配都重新呼叫 還有種解決方式是去掉 相關資源 |
The text was updated successfully, but these errors were encountered: |
JavaScript 中正則匹配時結果不一致的問題
相關文章
- 在MaxCompute中配置Policy策略遇到結果不一致的問題
- Spark解決SQL和RDDjoin結果不一致問題(工作實錄)SparkSQL
- Java處理正則匹配卡死(正則回溯問題)Java
- EBS OAM進行patch分析結果中的路徑規則問題
- SQL和儲存過程的結果不一致——小議Oracle的number精度問題SQL儲存過程Oracle
- 分享一個shell指令碼的坑:grep匹配+wc取值 在指令碼執行後的結果與手動執行結果不一致指令碼
- python中正則模組Python
- 關於轉義符 在php正則中的匹配問題PHP
- 資料結構括號匹配問題資料結構
- JavaScript中Typeof返回的結果JavaScript
- 關於在powershell與cmd查詢vue版本時結果不一致Vue
- JavaScript中正規表示式的使用JavaScript
- 字串匹配問題字串匹配
- javascript的物件問題及總結JavaScript物件
- PostgreSQL問題分析1:時間線不一致SQL
- 無符號數減法,注意溢位問題(移項後,不等式結果不一致)符號
- 假期中IIS問題的調查結果[轉譯]
- 字串匹配模式問題字串匹配模式
- JavaScript跨域問題總結JavaScript跨域
- intentFiltger的匹配原則Intent
- 【MySQL】order by 結果不準確的問題及解決MySql
- 關於分頁查詢結果的快取問題快取
- JavaScript中this的繫結規則JavaScript
- JAVA中正規表示式匹配,替換,查詢,切割的方法Java
- hibernate查詢結果Logic:iterate問題
- 數倉sql場景:迭代求結果問題SQL
- 理解 Nginx 在處理請求時的匹配規則Nginx
- JavaScript this 繫結規則JavaScript
- 詳解Javascript中正規表示式的使用JavaScript
- MySQL主從複製不一致的情況的問題總結MySql
- Activity的啟動模式及IntentFilter匹配規則總結模式IntentFilter
- 正則匹配規則2
- 有趣的ES:解決es返回結果數量限制問題
- 疑惑:java中文問題在各種測試中的結果Java
- 解決 Python 指令碼無法生成結果的問題Python指令碼
- python訪問oracle時的問題總結PythonOracle
- 測試sql server全文索引,結果遇到問題SQLServer索引
- struts json型別返回結果異常問題JSON型別