我正在使用一個 fastify 服務器,其中包含一個呼叫函式的打字稿檔案,以確保人們不會發送不需要的字符。這是功能:
const SAFE_STRING_REPLACE_REGEXP = /[^\p{Latin}\p{Zs}\p{M}\p{Nd}\-\'\s]/gu;
function secure(text:string) {
return text.replace(SAFE_STRING_REPLACE_REGEXP, "").trim();
}
但是當我嘗試啟動我的服務器時,我收到一條錯誤訊息: “無效的正則運算式 - 字符類中的無效屬性名稱”。
它曾經與我以前的正則運算式一起作業得很好:
const SAFE_STRING_REPLACE_REGEXP = /[^0-9a-zA-Zàáa???????èéê???ìí???ńòó????ùú?ü?ū?y???????àá?????????èéê?ìí?????òó????ùú?ü?ū?Y???????????e\-\s\']/g;
function secure(text:string) {
return text.replace(SAFE_STRING_REPLACE_REGEXP, "").trim();
}
但有人告訴我,它還不夠優化。我還被告知在性能方面使用拆分/加入比使用正則運算式/替換更好,但我不知道我是否可以在我的情況下使用它。
uj5u.com熱心網友回復:
你需要使用
const SAFE_STRING_REPLACE_REGEXP = /[^\p{Script=Latin}\p{Zs}\p{M}\p{Nd}'\s-]/gu;
// or
const SAFE_STRING_REPLACE_REGEXP = /[^\p{sc=Latin}\p{Zs}\p{M}\p{Nd}'\s-]/gu;
您需要在 Unicode 類別類中sc=或中為腳本添加前綴,因此應指定為. 請參閱ECMAScript 參考。Script=\p{Latin}\p{Script=Latin}
另外,使用u標志時,不能轉義非特殊字符,所以不要轉義',最好將-字符移動到字符類的末尾。
您也可以使用 split&join:
const SAFE_STRING_REPLACE_REGEXP = /[^\p{Script=Latin}\p{Zs}\p{M}\p{Nd}'\s-]/u;
console.log("?cki-?a? русский!!!中國".split(SAFE_STRING_REPLACE_REGEXP).join(""))
請注意,您不需要g修飾符 with split,這是默認行為。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/427090.html
上一篇:如何結合2個重寫規則在Nginx中加載webp檔案?
下一篇:正則運算式匹配X連續重復n次
