调试一个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创建移动应用程序的移动书籍,它挂起了。在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's Playground页面上的Javascript验证。
我的问题不是如何在Javascript中做URL验证。我的问题如下:如果我使用Javascript正则表达式并且它挂在一段文本上,是什么使正则表达式像这样冻结浏览器?我怎样才能抓住这样的案例呢?
这是否只发生在这个答案中提到的new RegExp(...)
vs /regex/
?
在实际验证方面,我切换到一个不同的/regex/
,但我仍然想张贴这个问题,因为它导致了一个相当痛苦的调试过程。(不过,任何试图用正则表达式验证url或电子邮件的方法都可能会很痛苦)。
对于这个正则表达式,这似乎是new RegExp(...)
而不是/regex/
发生的事情。对于URL验证和其他类型的正则表达式匹配,使用:
function validFoo(value) {
return /foo/i.test(value);
}
其中foo
为正则表达式
看起来正则表达式有问题,Chrome如何解释它。
问题在于url中的第二个请求参数(&)以及Chrome javascript引擎如何陷入循环。
如果你不需要计算url中的端口,可以这样做:/^ (https ?://) ? ([' da-z. -] +)。([a - z] {2,6}) ((/' w。)) /?美元/
- 正在验证8个真/假复选框或复选框中的2个
- 借助asp.net验证或java脚本对多个文本进行验证
- Amazon S3 REST API大小不正确
- jQuery自定义验证比较多个输入的序列
- 使用html中的外部javascript进行数据验证
- 如何使用jquery Validation验证Formspread
- jquery中的文本框验证
- 在验证和发送邮件后更改联系人表单的 html
- 代码不会验证
- JS验证ajax返回的html中的表单数据
- 同步调用,直到用户通过angular验证为访问者
- 带有加号的电话号码验证(可选)
- 解析javascript表单验证器
- 两位数的月份日期验证
- 使用angularjs验证文本框中的电子邮件
- 验证Javascript中的Textarea
- 使用regex的jquery keydown绑定不会验证撇号和句点
- Jquery表单验证插件-如果选中复选框,如何在提交时执行某些操作
- 正在删除node.js中已验证的网站
- 调试一个Javascript RegExp正则表达式:验证挂在Amazon URL上