我用下面的表达来有效的URL这样的URL正则表达式: http://www.linkedin.com/in/johndoe与参数
(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.linkedin)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))
但审定只有当我输入完整的网址与参数适用于http://www.linkedin.com
,这是不工作。请帮忙。
我用下面的表达来有效的URL这样的URL正则表达式: http://www.linkedin.com/in/johndoe与参数
(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.linkedin)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))
但审定只有当我输入完整的网址与参数适用于http://www.linkedin.com
,这是不工作。请帮忙。
你,因为它会检查TLD后的字符串末尾会失败正则表达式(见$
se)
后)。此外,它只会验证“linked.in”网址。
所以,你必须让更多的字符。这是您的fixed regex。
^(?>(?:https?|ftp):\/\/(?:(?:[a-zA-Z0-9][a-zA-Z0-9_-]*)\.linkedin\.(?:com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se))(?:(?:\/[^\/\r\n]*)*)?)$
同时匹配:
http://www.linkedin.com/in/johndoe
http://www.linkedin.com
<?php
$re = "/^(?>(?:https?|ftp):\\/\\/(?:(?:[a-zA-Z0-9][a-zA-Z0-9_-]*)\\.linkedin\\.(?:com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se))(?:(?:\\/[^\\/\\r\\n]*)*)?)$/m";
$str = "http://www.linkedin.com/in/johndoe\n\nhttp://www.linkedin.com";
preg_replace_callback($re, function ($matches) {
echo "Matched: " . $matches[0] . "\n";
}, $str);
?>
您的表情存在错误,您明确标识了linkedin。
使用此:
if (!filter_var($url, FILTER_VALIDATE_URL) === false) {
echo("$url is a valid URL");
} else {
echo("$url is not a valid URL");
}
谢谢你的帮助。有没有办法编辑表达式本身来做到这一点? – Viralk 2015-04-05 10:56:07
尝试使用这个正则表达式:
(?i)(?:https?|ftps?)://[A-Z0-9][A-Z0-9_-]*\.linkedin+\.(?:com|org|net|dk|at|us|tv|info|uk|co\.uk|biz|se)(?::\d+)?(?:/.*)?$
我会说,它不适合'HTTP工作:// www.linkedin.com'。模式中的'$'跟在端口规范之后,可以翻译成“匹配字符串结尾,后跟冒号和一些数字”。但是在字符串结束之后找到字符会很困难...... :-P按照下面的@Denis的建议使用'parse_url'或'filter_var'。 – mhall 2015-04-05 11:16:43