在javascript中測試我的正則表達式時,我似乎得到了一致的奇怪結果。Javascript正則表達式應該通過.test(),但似乎失敗 - 爲什麼?
這裏是我的小提琴: http://jsfiddle.net/s5fYf/15/
這是從一個web項目,我要建服用。我將一個驗證對象數組傳遞給我的驗證函數,它通過它們進行迭代,根據值驗證每個規則。如果一個是錯誤的,它應該停止循環並返回一個返回對象,該對象從失敗的規則中拾取消息和cssClass。
的問題是驗證方法似乎即使正則表達式測試通過返回false,這應該是不可能的!所以我覺得我錯過了一些關鍵。從調試輸出中,您可以看到輸出的正則表達式測試通過,但在代碼中測試時明顯失敗。這與我在我的項目中看到的內容一致,如果我省略了調試輸出,則返回值基本上在true和false之間切換。
本質上/regex/.test(value)
功能似乎在真假之間擺動,這是一致的,但不是我期待的...所以,我的問題是什麼導致這種奇怪的行爲!?
我過我的正則表達式的解決方案之外,據我可以看到它的工作原理。
UPDATE:
省略從我的正則表達式中的 'g' 或全局標誌,解決了這個問題。
請參閱下面的答案,那麼這個鏈接全局標誌的完整解釋和它的缺陷:
Why RegExp with global flag in Javascript give wrong results?
更新小提琴:http://jsfiddle.net/Ym2hW/2/ 所以現在我得到測試之間'()'和返回值的一致性。但是如果你多次觸發模糊,你會得到相同的振盪。你如何解決這個問題? – Jon 2012-02-14 11:02:16
好吧所以問題在於全球旗幟,請參閱我上面的更新。 – Jon 2012-02-14 11:21:13
謝謝!當我從我的正則表達式中刪除'g'全局標誌時,存儲的'test()'結果問題就消失了。全球旗幟約20%的額外正則表達式。test()調用有效時失敗。 – 2012-04-08 14:40:26