首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式、URL有效性问题

正则表达式、URL有效性问题
EN

Stack Overflow用户
提问于 2010-08-06 15:18:00
回答 2查看 662关注 0票数 2

示例链接

https://stackoverflow.com/questions/tags/ruby

真url

https://stackoverflow.com/questions/@#dsd/javascript

假url

如何检查只/标记/部分不完整url的有效性

任何帮助我的人都是给我这个url部分正则表达式的人。

如何根据我的情况验证我的url

谢谢

EN

回答 2

Stack Overflow用户

发布于 2010-08-06 15:21:32

整个URL:

代码语言:javascript
复制
function isValidURL($url) {
    return preg_match('^(https?|ftp)\:\/\/([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)?@)?[a-z0-9+\$_-]+(\.[a-z0-9+\$_-]+)*(\:[0-9]{2,5})?(\/([a-z0-9+\$_-]\.?)+)*\/?(\?[a-z+&\$_.-][a-z0-9;:@/&%=+\$_.-]*)?(#[a-z_.-][a-z0-9+\$_.-]*)?\$', $url);
}

Unix文件夹名(基本上是/s之间的任意名称):

代码语言:javascript
复制
function isValidPath($url) {
    return preg_match('(\/([a-z0-9+\$_-]\.?)+)*\/?', $url);
}
票数 1
EN

Stack Overflow用户

发布于 2010-08-07 23:26:08

丹尼姆的回答是准确的,尽管它可能不完全符合你的需要,正如评论中所指出的。而且,他的解决方案是基于php的。从扫描您的标记参与情况来看,我猜您实际上更喜欢javascript解决方案(所以我将同时提供这两个!)。

首先,重构他的php:

代码语言:javascript
复制
function isValidURL($url) {
    $regex = "((https?|ftp)\:\/\/)?"; // SCHEME 
    $regex .= "([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)?@)?"; // User and Pass 
    $regex .= "((([a-z][a-z0-9-.]*)\.([a-z]{2,3}))|(([12]?[0-9]?[0-9]\.){4}))"; // Host or IP 
    $regex .= "(\:[0-9]{2,5})?"; // Port 
    $regex .= "(\/([a-z0-9+\$_-]\.?)+)*\/?"; // Path 
    $regex .= "(\?[a-z+&\$_.-][a-z0-9;:@&%=+\/\$_.-]*)?"; // GET Query 
    $regex .= "(#[a-z_.-][a-z0-9+\$_.-]*)?"; // Anchor 
    return preg_match($regex, lcase($url));
}

注意,在检查url之前,我修改了返回以执行lcase操作。您还可以在regex上使用不区分大小写的标志来防止这种情况发生。如前所述,其中有许多部分可能对用例有效,也可能无效。具体来说,您可能从来没有想要接受包含用户名/pw或来自静态IP的url的情况。通过删除相关行,您可以修改regex以排除匹配的任何部分都是无效的。另外,以下是//Host or IP行的第二个选项,使其仅作为主机:

代码语言:javascript
复制
    $regex .= "([a-z][a-z0-9-.]*)\.([a-z]{2,3})"; // Host only 

现在,javascript中的相同内容(结合在一起,因为js处理的regex与strings...adjustments不同,在php版本中更容易制作,然后在这里模仿):

代码语言:javascript
复制
function isValidURL(url) {
   var regex = /((https?|ftp)\:\/\/)?([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)?@)?((([a-z][a-z0-9-.]*)\.([a-z]{2,3}))|(([12]?[0-9]?[0-9]\.){4}))(\:[0-9]{2,5})?(\/([a-z0-9+\$_-]\.?)+)*\/?(\?[a-z+&\$_.-][a-z0-9;:@&%=+\/\$_.-]*)?(#[a-z_.-][a-z0-9+\$_.-]*)?/i
   return (url.match(regex));
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3425165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档