下面是我的准则:
(https?:\/\/)([a-zA-Z]{2,6}\.)*((?!.*[|!{}[\]^"*;]).)+(\.*)([a-zA-Z0-9\.\-\/\:\?&=_%#]+)+([&|?])+$它是验证一个具有负面前瞻性的URL,以便允许其他语言中的字符。
当我在http://regex101.com/#javascript上测试它时会发生这样的情况:
为了-
http://server.com/path?id=1111111 -不匹配 http://server.com/path?id=11111111 -超时您的表达式花了太长时间来评估。 http://server.com/path?id=111111111111111111111&匹配
观测:
当查询参数的值超过一定长度时,就会超时。
但是对于匹配的URL,参数值的长度并不重要。
为什么它超时超过一定的长度?需要修改的正则表达式的哪一部分?
注意: RegEx要求URL以?或&结尾
提前谢谢。
编辑:
我需要的是一个正则表达式来验证所有标准(例如,www.xyz.com或someip:端口,后面跟着路径参数和/或查询参数等)URL。它也应该支持其他语言的字符。使用额外的验证来强制URL以
?或&结尾。
发布于 2014-06-23 12:45:30
(…+)+ in ([a-zA-Z0-9\.\-\/\:\?&=_%#]+)+导致灾难性回溯。去掉其中一个优点会有帮助。
发布于 2014-06-23 12:53:24
这是我能想到的最好的:
\b([\d\w\.\/\+\-\?\:]*)((ht|f)tp(s|)\:\/\/|[\d\d\d|\d\d]\.[\d\d\d|\d\d]\.|www\.|\.tv|\.ac|\.com|\.edu|\.gov|\.int|\.mil|\.net|\.org|\.biz|\.info|\.name|\.pro|\.museum|\.co)([\d\w\.\/\%\+\-\=\&\?\:\\\"\'\,\|\~\;]*)\bJSFiddle:(我用别人的演示来测试它:)
http://jsfiddle.net/3AE9p/
当然,这是不完整的,但它是相当接近你会想要和期待!
https://stackoverflow.com/questions/24363616
复制相似问题