使用formValidator-4.1.3.js進行email格式check。
書寫方式如下。
$("#email").formValidator({onShow:"請輸入郵箱",onFocus:"郵箱6-100個字元,輸入正確了才能離開焦點",onCorrect:"恭喜你,你輸對了",defaultValue:"@"}).inputValidator({min:6,max:100,onError:"你輸入的郵箱長度非法,請確認"}).regexValidator({regExp:"^([ \\w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([\\w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$",onError:"你輸入的郵箱格式不正確"});
在靜態網頁中測試正常。但是在thinkphp的模板檔案中,經過解析後的代碼變成了
regExp:"^([ \w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([\\w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$"
導致formValidator報字“符集越界”的問題。
為什麼運算式被更改了。\\w變成了\w?
請大家幫忙確認!
回複討論(解決方案)
模板檔案會被讀取到變數中,所以 \\w 變成了 \w
要寫作 \\\w 或 \\\\w
謝謝回複。按照上述修改後ok了。
還有一點疑問。
regExp:"^([ \\w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([ \\w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$"
運算式中有兩個 \\w,為什麼只有前面前面的 \\w被轉換成了 \w,後面的\\w可以不變的?
這就不清楚了,需要看 php 的 C 原始碼才能分析原因
不過這不是什麼人都可以做到的
實際使用中也不必深究,遇到加一個“\”不行時就再加一個,如此迴圈知道不出錯
你可以看到國外的不少代碼中會有連續四五個 \ 的
可能thinkphp在模板解析時,只對字串中的第一個\\進行變換,後面的都當作字串處理了。
謝謝了。