在 PHP 中判断一个字符串是否是有效的域名,可以使用正则表达式或者 PHP 内置的 filter_var 函数。
推荐使用以下方式
function is_domain($domain) {
// 转换国际化域名(支持中文)
$punycode = idn_to_ascii(
$domain,
IDNA_DEFAULT,
INTL_IDNA_VARIANT_UTS46,
$idna_info
);
if ($punycode === false) return false;
// 基础域名格式验证
if (filter_var($punycode, FILTER_VALIDATE_DOMAIN, FILTER_FLAG_HOSTNAME) === false) {
return false;
}
//排除纯数字
if (preg_match('/^\d+$/', $punycode)) { return false; }
// 排除顶级域名为纯数字(如:test.123)
$parts = explode('.', $punycode);
$tld = end($parts);
if (ctype_digit($tld)) {
return false;
}
return true;
}
$domains = [ "example.com", // 有效的域名
"sub.example.com", // 有效的域名
"-example.com", // 无效的域名(以 - 开头)
"example-.com", // 无效的域名(以 - 结尾)
"example..com", // 无效的域名(连续的 .)
"example", // 无效的域名(没有顶级域)
"123.com", // 有效的域名
"example.c", // 无效的域名(顶级域名太短)];
评论
发表评论: