PHP 正则后瞻 匹配是否是域名

1 篇文章 0 订阅
/^([a-z0-9]+([a-z0-9-]*(?:[a-z0-9]+))?\.)?[a-z0-9]+([a-z0-9-]*(?:[a-z0-9]+))?(\.us|\.tv|\.org\.cn|\.org|\.net\.cn|\.net|\.mobi|\.me|\.la|\.info|\.hk|\.gov\.cn|\.edu|\.com\.cn|\.com|\.co\.jp|\.co|\.cn|\.cc|\.biz)$/i

匹配网址:

    /**
     * @description 匹配
     *              t.cn 正确
     *              t-.cn 错误
     *              tt.cn正确
     *              -t.cn 错误
     *              t-t.cn 正确
     *              tst-test-tst.cn 正确
     *              tst--tt.cn -- 错误
     *
     *
     *
     * @param $domain
     *
     * @return bool
     */
    public function isDomain($domain)
    {
        return !empty($domain) && strpos($domain, '--') === false &&
        preg_match('/^([a-z0-9]+([a-z0-9-]*(?:[a-z0-9]+))?\.)?[a-z0-9]+([a-z0-9-]*(?:[a-z0-9]+))?(\.us|\.tv|\.org\.cn|\.org|\.net\.cn|\.net|\.mobi|\.me|\.la|\.info|\.hk|\.gov\.cn|\.edu|\.com\.cn|\.com|\.co\.jp|\.co|\.cn|\.cc|\.biz)$/i', $domain) ? true : false;
    }
如果有问题bug,欢迎指正

第二种写法:

    /**
     * @param string $str
     *
     * @return bool
     */
    public static function isDomain($str = '')
    {
        return !empty($str) && !preg_match('/^-|-$|--|-\.|\.-/', $str) && preg_match('/^([\w-]+\.)?[\w-]+' . self::RegExpSuffix() . '$/', $str) ? true : false;
//        return !empty($str) && strpos($str, '--') === false && preg_match('/^(([a-z0-9]+([a-z0-9-]*(?:[a-z0-9]+))?\.)?[a-z0-9]+([a-z0-9-]*(?:[a-z0-9]+))?' . self::RegExpSuffix() . ')$/i', $str) ? true : false;
    }

    /**
     * @return mixed
     */
    public static function RegExpSuffix()
    {
        return '(' . str_replace('.', '\.', implode('|', self::allowDomainSuffix())) . ')';
    }


    /**
     * @description 允许的扩展名
     * @return array
     */
    public static function allowDomainSuffix()
    {
        $arr = array(
            '.com',
            '.com.cn',
            '.cn',
            '.net',
            '.net.cn',
            '.org',
            '.org.cn',
            '.gov.cn',
            '.hk',
            '.cc',
            '.info',
            '.biz',
            '.mobi',
            '.us',
            '.me',
            '.co',
            '.co.jp',
            '.edu',
            '.tv',
            '.la',
        );

        sort($arr);

        return array_unique(array_reverse($arr));
    }


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值