示例链接
https://stackoverflow.com/questions/tags/ruby
真url
https://stackoverflow.com/questions/@#dsd/javascript
假url
如何检查只/标记/部分不完整url的有效性
任何帮助我的人都是给我这个url部分正则表达式的人。
如何根据我的情况验证我的url
谢谢
发布于 2010-08-06 15:21:32
整个URL:
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之间的任意名称):
function isValidPath($url) {
return preg_match('(\/([a-z0-9+\$_-]\.?)+)*\/?', $url);
}发布于 2010-08-07 23:26:08
丹尼姆的回答是准确的,尽管它可能不完全符合你的需要,正如评论中所指出的。而且,他的解决方案是基于php的。从扫描您的标记参与情况来看,我猜您实际上更喜欢javascript解决方案(所以我将同时提供这两个!)。
首先,重构他的php:
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行的第二个选项,使其仅作为主机:
$regex .= "([a-z][a-z0-9-.]*)\.([a-z]{2,3})"; // Host only 现在,javascript中的相同内容(结合在一起,因为js处理的regex与strings...adjustments不同,在php版本中更容易制作,然后在这里模仿):
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));
}https://stackoverflow.com/questions/3425165
复制相似问题