在我的 Angular 應用程式中,我使用了支持定義自定義轉譯器的翻譯服務。轉譯器根據翻譯檔案中的內容接收傳入的翻譯。有些是純翻譯,您還可以將物件傳遞給翻譯(例如label.profile.greeting翻譯鍵):
{
"label.startpage.welcome": "Welcome!",
"label.startpage.info": "This website is awesome. Hope you like it.",
"label.profile.greeting": "Hi, {{username}}."
}
當服務嘗試翻譯時,它會遍歷翻譯中的所有單詞并將該單詞發送到轉譯器。然后,轉譯器嘗試確定它是簡單的翻譯,還是需要注入翻譯的物件。
然而,我的轉譯器能夠將翻譯注入其他翻譯:
{
"label.favourite": "My favourite fruit is",
"label.favourite.banana": "{{label.favourite}} banana!",
"label.favourite.pineapple": "{{label.favourite}} pineapple!"
}
我撰寫了這個簡單的箭頭函式,我的轉譯器使用它來確定傳入的翻譯是否是翻譯鍵:
const isTranslationKey = (value: string): boolean => /(\w (?:\.\w ) )/.test(value);
它有效。盡管,根據 SonarQube 的說法,由于正則運算式的安全敏感性,此正則運算式具有很高的安全風險。我想這可能是導致未來失敗的原因的字串長度,因為字串沒有最大限制。我試圖將正則運算式更改為類似的東西,但我無法判斷它是否更合適:
/^([A-Za-z]{1,10}) (\.([A-Za-z]{1,10})).{1,40}$/
我需要一些這方面的專業知識。提前致謝!:)
uj5u.com熱心網友回復:
您可以使用的最終正則運算式可以是兩者之一,具體取決于您是否需要支持所有 Unicode 字母:
/^(?=.{3,60}$)[a-z] (?:\.[a-z] ) $/i
/^(?=.{3,60}$)\p{L} (?:\.\p{L} ) $/u
請注意,第二個正則運算式符合 ECMAScript 2018,在使用它之前請確保您的 JavaScript 環境支持它。
詳情:
^- 字串的開始(?=.{3,60}$)- 一個正向前瞻,需要除換行符以外的三到六十個字符,緊跟在當前位置右側的字串結尾位置[a-z]- 一個或多個 ASCII 字母(任何 Unicode 字母,如果您使用\p{L}或\p{Alphabetic})(?:\.[a-z] )- 一個或多個重復.和一個或多個 ASCII 字母(任何 Unicode 字母,如果您使用\p{L}/\p{Alphabetic})$- 字串的結尾。
請參閱正則運算式演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/360622.html
標籤:javascript 有角的 正则表达式
下一篇:打字稿自定義映射到物件
