php 如何用正则表达式判定字符串是否是域名

匹配域名有以下的名目要求:

1、域名中的标号都由英文字母和数字构成,每一个标号不高出63个字符,也不区分巨细写字母。标号中除连字符(-)外不能利用其他的标点标记。

2、各级域名之间用实点(.)毗连,三级域名的长度不能高出20个字符。

3、由多个标号构成的完整域名总共不高出255个字符。

所以匹配域名的正则

1、由英文数字 和 “_”构成    [-a-z0-9]

2、每级要以“.”毗连

3、三级不能域名长度不高出20 {1,20}

测试如下名目:

<?php $url = 'www.test.com'; $search = '/---正则N---/'; if(preg_match($search,$url)){ echo '匹配'; }else { echo '不匹配'; } ?>

先从网上总结的几个常见的

正则1

\b([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}\b

错误匹配:长度>60 

正则2

^(([^-][a-z0-9A-Z-_]+\.)*)[^-][a-z0-9A-Z-_]+(\.[a-zA-Z]{2,4}){1,2}$

错误匹配:长度>60 

错误匹配:

正则3

(([\w\d\-_]+\.):?[^-_])+\w{2,4}

不匹配:test.com.cn

错误匹配:

正则4

[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+.?

暂无错误

正则5

(?<=\.)([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}

不匹配二级域名

正则6

([a-z0-9][a-z0-9\-]*?\.(?:com|cn|net|org|gov|info|la|cc|co)(?:\.(?:cn|jp))?)$

许多顶级域名不匹配

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/7881.html