PHP,验证用户提交的URL与特定域

时间:2014-02-24 09:10:42

标签: php regex validation url

我尝试使用带有PHP的Regex验证网址。 我需要一个认为有效的模式:

任何其他内容无效,因此您无法使用ssh://,.com域名等。

我尝试了以下模式:

/(((http|ftp|https):\/{2})+(([0-9a-z_-]+\.)+(pf)(:[0-9]+)?((\/([~0-9a-zA-Z\#\+\%@\.\/_-]+))?(\?[0-9a-zA-Z\+\%@\/&\[\];=_-]+)?)?))\b/imuS

但我已经失去了许多小时(和头发),试图让它按照我需要的方式工作。

任何建议都表示赞赏。

5 个答案:

答案 0 :(得分:2)

php中有 parse_url 功能。

然后,验证scheme结果的hostparse_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
    ?>