正規式右合樣(Lookahead)在IE6/7無法正常運作
昨天被一個問題打了整晚搞不定,最後終於在高手指點去看下面這篇文章,發現我踩到 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,我什麼時候才能遠離你啊
--------
沒什麼特別的~
不過是一些筆記而已