簡體   English   中英

調試Javascript RegExp正則表達式:驗證在Amazon URL上掛起

[英]Debugging a Javascript RegExp Regular Expression: Validation Hangs on Amazon URL

在使用Javascript驗證URL時,我使用了SO答案中的以下代碼:

function validateURL(textval) {
          var urlregex = new RegExp(
                "^(http|https|ftp)\://([a-zA-Z0-9\.\-]+(\:[a-zA-Z0-9\.&%\$\-]+)*@)*((25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])|([a-zA-Z0-9\-]+\.)*[a-zA-Z0-9\-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(\:[0-9]+)*(/($|[a-zA-Z0-9\.\,\?\'\\\+&%\$#\=~_\-]+))*$");
          return urlregex.test(textval);
        }

該功能對於我嘗試過的大多數URL都可以正常工作,但是在以下Amazon URL上(諷刺地) 使用jQuery Mobile編寫“ 創建移動應用”一書,它掛起了。 在Chrome開發者工具中,我什么都看不到,但是單擊選項卡中的任何位置都無法執行任何操作。

http://www.amazon.com/gp/product/178216006X/ref=s9_simh_gw_p351_d3_i4?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=center-2&pf_rd_r=0SDC8SED1N96XPK44VD2&pf_rd_t=101&pf_rd_p=1389517282&pf_rd_i=507846

該URL很長,但其中沒有什么特別的可以告訴我的。 實際上,它在以下Scott的Playground頁面上通過了Javascript驗證。

我的問題不是如何在Javascript中進行URL驗證。 我的問題如下:如果我使用Javascript正則表達式並將其掛在一段文本上,是什么使正則表達式像這樣凍結了瀏覽器? 我怎樣才能找到那件事呢?

這是僅在new RegExp(...) vs /regex/中發生的事情嗎?

在實際驗證方面,我切換到另一個/regex/但是我仍然想發布此問題,因為它導致了非常痛苦的調試過程。 (然后,任何嘗試使用正則表達式驗證URL或電子郵件的方法都可能會很痛苦)。

對於new RegExp(...) ,似乎發生了這種情況,對於此正則表達式, /regex/不是/regex/ 因此,對於URL驗證和其他類型的正則表達式匹配,請使用:

function validFoo(value) {
    return /foo/i.test(value);
}

其中foo是正則表達式。

看起來正則表達式以及Chrome如何解釋它都存在問題。 在Firefox中有效。

問題出在網址中的第二個request參數(&)以及Chrome JavaScript引擎如何陷入循環。

如果您不需要評估url中的端口,請使用以下內容:/^(https?://)?([\\da-z.-]+).([az.]{2,6} )([/ \\ w .-] /?$ /

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM