用于“网站名称”的PHP RegEx

时间:2009-05-11 16:10:23

标签: php regex dns

  

重复:PHP validation/regex for URL

我的目标是为网站名称创建一个PHP正则表达式。正则表达式用于主要收集表单,并且应该接受某人可能输入的任何合法类型的网站名称语法。经过详尽的搜索后,我很惊讶我在那里找不到一个。

以下是我正在寻找的正则表达式匹配:

AND,它也应匹配:

  • 以上任何一个带有反斜杠的内容,例如:somewebsite.com /
  • 子域

5 个答案:

答案 0 :(得分:8)

不需要RegEx。

$subject = 'example.com';
$part = (stripos($subject, 'http://') === FALSE)  ? 'http://' : '' ;
var_dump(filter_var($part.$subject, FILTER_VALIDATE_URL));

答案 1 :(得分:3)

您可能需要调整它:

<?php

$pattern = '/^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&amp;?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/';

$url1  = "http://www.somewebsite.com";
$url2  = "https://www.somewebsite.com";
$url3  = "https://somewebsite.com";
$url4  = "www.somewebsite.com";
$url5  = "somewebsite.com";

function valURL($pattern, $url) {

        $return = false;

        if(preg_match($pattern, $url)) {
                $return = true;
        }

        if($return == true) {
                echo "Match URL: <font color='green'>" . $url . "</font><br /><br />";
        } else {
                echo "Try Again: <font color='red'>URL: " . $url . "</font><br /><br />";
        }
}

valURL($pattern, $url1);
valURL($pattern, $url2);
valURL($pattern, $url3);
valURL($pattern, $url4);
valURL($pattern, $url5);

?>

答案 2 :(得分:3)

我决定在这里对答案进行基准测试,以证明正则表达式不是这些简单任务的答案。 Andy Leekman的代码比其他答案快30%到60%。他确实有一个错误,但我用一行代码修复了它。您可以在下面查看我的结果。

以下是测试运行的代码。

http://pastie.org/476900

alt text http://img254.imageshack.us/img254/7821/capturevzh.png

PS 如果有人使用正则表达式验证网址,我可能会发疯;)

答案 3 :(得分:-1)

/^([a-z0-9]([-a-z0-9]*[a-z0-9])?\\.)+((a[cdefgilmnoqrstuwxz]|aero|arpa)|(b[abdefghijmnorstvwyz]|biz)|(c[acdfghiklmnorsuvxyz]|cat|com|coop)|d[ejkmoz]|(e[ceghrstu]|edu)|f[ijkmor]|(g[abdefghilmnpqrstuwy]|gov)|h[kmnrtu]|(i[delmnoqrst]|info|int)|(j[emop]|jobs)|k[eghimnprwyz]|l[abcikrstuvy]|(m[acdghklmnopqrstuvwxyz]|mil|mobi|museum)|(n[acefgilopruz]|name|net)|(om|org)|(p[aefghklmnrstwy]|pro)|qa|r[eouw]|s[abcdeghijklmnortvyz]|(t[cdfghjklmnoprtvwz]|travel)|u[agkmsyz]|v[aceginu]|w[fs]|y[etu]|z[amw])$/i

http://www.shauninman.com/archive/2006/05/08/validating_domain_names

由谷歌提供。但它非常复杂,所以其他人可能会更简单。

编辑:先试试安迪的回答。如果你能找到一个正则表达式的替代品,9/10的替代方案要好得多。

答案 4 :(得分:-1)

^(https?://)?(([0-9a-z_!'().&=$%-]: )?[0-9a-z_!'().&=$%-]@)?(([0-9]{1,3}\.){3}[0-9]{1,3}|([0-9a-z_!'()-]\.)([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\.[a-z]{2,6})(:[0-9]{1,4})?((/?)|(/[0-9a-z_!*'().;?:@&=$,%#-])/?)$