我做了一个函数来验证没有任何正则表达式的域名。
<?php
function validDomain($domain) {
$domain = rtrim($domain, '.');
if (!mb_stripos($domain, '.')) {
return false;
}
$domain = explode('.', $domain);
$allowedChars = array('-');
$extenion = array_pop($domain);
foreach ($domain as $value) {
$fc = mb_substr($value, 0, 1);
$lc = mb_substr($value, -1);
if (
hash_equals($value, '')
|| in_array($fc, $allowedChars)
|| in_array($lc, $allowedChars)
) {
return false;
}
if (!ctype_alnum(str_replace($allowedChars, '', $value))) {
return false;
}
}
if (
!ctype_alnum(str_replace($allowedChars, '', $extenion))
|| hash_equals($extenion, '')
) {
return false;
}
return true;
}
$testCases = array(
'a',
'0',
'a.b',
'google.com',
'news.google.co.uk',
'xn--fsqu00a.xn--0zwm56d',
'google.com ',
'google.com.',
'goo gle.com',
'a.',
'hey.hey',
'google-.com',
'-nj--9*.vom',
' ',
'..',
'google..com',
'www.google.com',
'www.google.com/some/path/to/dir/'
);
foreach ($testCases as $testCase) {
var_dump($testCase);
var_dump(validDomain($TestCase));
echo '<br /><br />';
}
?>
此代码输出:
字符串(1)“a”布尔(假)
字符串(1)“0”布尔(假)
字符串(3)“a.b”布尔(真)
字符串(10)“google.com”布尔(真)
字符串(17)“news.google.co.uk”布尔(真)
字符串(23)“xn--fsqu00a.xn--0zwm56d”布尔(真)
字符串(11)“google.com”布尔(假)
字符串(11)“google.com。”布尔(真)
字符串(11)“goo gle.com”布尔(假)
字符串(2)“一个。”布尔(假)
字符串(7)“嘿。嘿”布尔(真)
字符串(11)“google-.com”布尔(假)
字符串(11)“-nj--9*.vom”布尔(假)
字符串(1)“”布尔(假)
字符串(2)“..”布尔(假)
字符串(11)“google..com”布尔(假)
string(14) "www.google.com" bool(true)
字符串(32)“www.google.com/some/path/to/dir/”布尔(假)
如果我遗漏了什么,我希望我已经涵盖了所有内容,请告诉我,我可以改进此功能。 :)