PHP判断一个字符串是否是有效的域名

远昔 代码记录 2025-01-22 2202 0

在 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",     // 无效的域名(顶级域名太短)];


评论

发表评论:

挤眼 亲亲 咆哮 开心 想想 可怜 糗大了 委屈 哈哈 小声点 右哼哼 左哼哼 疑问 坏笑 赚钱啦 悲伤 耍酷 勾引 厉害 握手 耶 嘻嘻 害羞 鼓掌 馋嘴 抓狂 抱抱 围观 威武 给力
提交评论

清空信息
关闭评论