JavaScript >> Javascript 文檔 >  >> Tags >> regex

一個 JScript/VBScript 正則表達式前瞻錯誤

這是 Internet Explorer 中最奇怪和最重要的正則表達式錯誤之一。在前瞻中使用可選省略時會出現它(例如,通過 ? , * , {0,n} , 或 (.|);但不是 + ,從一或更高開始的間隔量詞,或沒有零長度選項的交替)。 JavaScript 中的一個例子:

/(?=a?b)ab/.test("ab");
// Should return true, but IE 5.5 – 8b1 return false

/(?=a?b)ab/.test("abc");
// Correctly returns true (even in IE), although the
// added "c" does not take part in the match

幾年前我就知道這個錯誤了,這要歸功於 Michael Ash 的一篇博客文章,其中描述了密碼複雜性正則表達式的錯誤。但是,那裡的錯誤描述不完整,而且有些不正確,如上圖所示,減少了測試用例。老實說,雖然錯誤的行為是可以預測的,但描述起來有點棘手,因為我還沒有弄清楚內部到底發生了什麼。我建議使用上述代碼的變體來更好地理解問題。

幸運的是,由於該錯誤是可預測的,因此通常可以解決。例如,您可以避免使用 Michael 帖子中的密碼正則表達式 (/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,15}$/ ) 通過將其寫為 /^(?=.{8,15}$)(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*/.{8,15}$ 前瞻必須首先出現)。重要的是要意識到這個問題,因為它很容易在你的代碼中引入潛在的和難以診斷的錯誤。請記住,它顯示為可變長度的前瞻。如果您正在使用此類模式,請在 IE 中測試它們。


Tutorial JavaScript 教程
  1. 如何使用 Mongoose 解決 Handlebars 中的自身屬性問題

  2. 一個簡單的 html+js 用例中的 Vite

  3. 使用 Vue Composition API 重寫 Vue 2.x 組件

  4. 任何人都可以推荐一些 JavaScript 書籍和路線圖來學習使用 NodeJS 進行後端 Web 開發嗎?

  5. 使用 Javascript 提高我的英語語言技能!

  6. 第 3 集:構建 JSON API - 路由結構和設置

  7. 使用 GitHub 和 Auth0 規則進行社交登錄

  1. 閱讀片段 [8]

  2. 添加屬性到對象 JavaScript |示例代碼

  3. .Net + Angular + PoUi:FullStackPlayGroung

  4. 為什麼 cloneNode 排除自定義屬性?

  5. 如何避免 Javascript 中的命名空間污染

  6. 使用網絡存儲

  7. JavaScript 中的“this”關鍵字是什麼(面向對象編程)

  1. 如何在 Linux 中監控 CPU 利用率

  2. 構建 Slack /remind 克隆 - #25DaysOfServerless 挑戰的第 6 天

  3. 虛擬DOM |和解算法 |表現

  4. JavaScript 工具中的指標、日誌和跟踪