建立示例專案考察如下場景,我們有個輸入框元件,輸入時同時進行校驗。 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策略遇到結果不一致的問題
- Java處理正則匹配卡死(正則回溯問題)Java
- Spark解決SQL和RDDjoin結果不一致問題(工作實錄)SparkSQL
- python中正則模組Python
- 關於轉義符 在php正則中的匹配問題PHP
- 資料結構括號匹配問題資料結構
- javascript的物件問題及總結JavaScript物件
- 分享一個shell指令碼的坑:grep匹配+wc取值 在指令碼執行後的結果與手動執行結果不一致指令碼
- PostgreSQL問題分析1:時間線不一致SQL
- 正則匹配開頭和結尾
- JavaScript中this的繫結規則JavaScript
- JavaScript this 繫結規則JavaScript
- [求助] LR 測試的結果和 fiddler 抓取的時間為什麼不一致?
- 字串匹配模式問題字串匹配模式
- JavaScript中Typeof返回的結果JavaScript
- 無符號數減法,注意溢位問題(移項後,不等式結果不一致)符號
- 關於在powershell與cmd查詢vue版本時結果不一致Vue
- 關於JMeter中正規表示式提取器的作用域問題JMeter
- Activity的啟動模式及IntentFilter匹配規則總結模式IntentFilter
- 理解 Nginx 在處理請求時的匹配規則Nginx
- 正則匹配規則2
- python的re正則匹配Python
- javascript的this指向問題JavaScript
- Greenplum工具GPCC和GP日誌中時間不匹配的問題分析
- 正則匹配規則記錄
- 解決 Python 指令碼無法生成結果的問題Python指令碼
- FastJsonHttpMessageConverter造成返回結果多次序列化的問題ASTJSONHTTP
- 正規表示式匹配問題
- 正則匹配的捕獲組
- apisix~路由字首的正則匹配API路由
- 數倉sql場景:迭代求結果問題SQL
- linux下du和df結果不一致的原因及處理Linux
- 括號匹配的檢驗問題(C++)C++
- 有趣的ES:解決es返回結果數量限制問題
- 正則問題整理
- 正則匹配數字
- Python正則匹配中文Python
- grep 多行 正則匹配