我尝试使用带有PHP的Regex验证网址。 我需要一个认为有效的模式:
任何其他内容无效,因此您无法使用ssh://,.com域名等。
我尝试了以下模式:
/(((http|ftp|https):\/{2})+(([0-9a-z_-]+\.)+(pf)(:[0-9]+)?((\/([~0-9a-zA-Z\#\+\%@\.\/_-]+))?(\?[0-9a-zA-Z\+\%@\/&\[\];=_-]+)?)?))\b/imuS
但我已经失去了许多小时(和头发),试图让它按照我需要的方式工作。
任何建议都表示赞赏。
答案 0 :(得分:2)
php中有 parse_url 功能。
然后,验证scheme
结果的host
和parse_url
会更容易。
答案 1 :(得分:1)
试试这个
/((https?|ftp):\/\/.)?(www\.)?[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)*\.pf/i
我不确定这是否是最佳解决方案。
答案 2 :(得分:0)
^((HTTP | FTP)[秒]://) - ([\ W- /] +)(.PF)([\ W- /.\& \%\ $ + \?] +)?$
处理请求的所有内容,除非我将问题解释错误。 在此测试:http://www.cuneytyilmaz.com/prog/jrx/请勾选不区分大小写。
在php中实现 / ^((http | ftp)[s]?://)?([\ w- /。] +)(。pf)( [\ W - /.\&安培;?\%\ $ + \] +)$ / I
答案 3 :(得分:0)
这是一种更好的方式来做你想要的,被授予它不使用正则表达式,但由于这个原因,它更容易维护和使用本机php函数:
<?php
function isValidPFurl($url) {
if (strpos($url, "://" ) === false) {
$url = 'http://' . $url;
}
$valid = filter_var($url, FILTER_VALIDATE_URL);
if ($valid !== false) {
$parsed = parse_url($valid);
$host = $parsed['host'];
$scheme = $parsed['scheme'];
$valid = false;
switch($scheme) {
case 'ftp':
case 'http':
case 'https':
$p = explode(".", $host);
if ($p[sizeof($p) - 1] == 'pf') {
$valid = true;
}
break;
default:
$valid = false;
}
}
return $valid;
}
$testUrls = array(
"http://example.pf/",
"example.pf",
"www.example.pf",
"ftp://example.pf",
"https://example.pf",
"ssl://example.pf"
);
foreach ($testUrls as $url) {
echo "is $url valid? ", (int) isValidPFurl($url), "\n";
}
答案 4 :(得分:-1)
根据您的需要,您必须尝试这个
<?php
$regex = "((https?|ftp)\:\/\/)?"; // SCHEME
$regex .= "([a-z0-9+!*(),;?&=\$_.-]+(\:[a-z0-9+!*(),;?&=\$_.-]+)?@)?"; // User and Pass
$regex .= "([a-z0-9-.]*)\.([a-z]{2,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
?>