正規式右合樣(Lookahead)在IE6/7無法正常運作

  • 1287
  • 0
  • 2012-07-17

正規式右合樣(Lookahead)在IE6/7無法正常運作

dotBlog 的標籤: ,

昨天被一個問題打了整晚搞不定,最後終於在高手指點去看下面這篇文章,發現我踩到 IE6/7 的地雷… 病厭厭

參考資料:A JScript/VBScript Regex Lookahead Bug

我用的正規式如下,很簡單就是要求輸入的值必須長度>=6,且包含數字、小寫英文、大寫英文:

^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,}$

測試值:qwer1aSd、P@ssw0rd

然後在 IE6 測試(因為客戶要求的環境是 IE6),No Match !!! (好想放吶喊的圖)因為這是我第一次在專案中使用 Lookahead 的正規式,所以我一直試到底那裡寫錯,也爬了一堆文章,怎麼看都是對的啊……後來發現,整個正規式是否匹配的邏輯完全錯亂,例如:qwer1aSd123a 會過,qwer1aSd123 就不會過;1234aSdSSS1 會過,1234aSdSSS 不會過。總之,根本就沒辦法推出正確的邏輯 嚎啕大哭

後來發現,在 IE9 上竟然是 Match,就開始懷疑是不是瀏覽器有問題(畢竟是犯案累累的 IE6),果然,Chrome、Firefox、IE8/9 都可以 Match,但是在 IE6/7 都不行。但是我不知道是什麼原因啊,也好難下手調整正規式,幸好高手指引了上面那篇文章,把正規式改成以下運算式,總算可以在  IE6 上正常作業了:

^(?=.{6,}$)(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).+$

可惡的 IE6,我什麼時候才能遠離你啊 火冒三丈

--------
沒什麼特別的~
不過是一些筆記而已