dskld5423 2015-12-04 23:05
浏览 69
已采纳

正则表达式使用通配符验证域

I am working on a DNS panel in PHP and I have to validate a DNS record name without the trailing dot. Here are a few examples:

example.com - match
sub.example.com - match
sub.sub.example.com - match
*.example.com - match
*.sub.example.com - match
sub.*.example.com - no mach
sub*.example.com - no match
*sub.example.com - no match

I am currently using this regex but the problem is it won't match a wildcard (*):

^(?!\-)(?:[a-z\d\-]{0,62}[a-z\d]\.){1,126}(?!\d+)[a-z\d]{1,63}$

I am not so good in formating regex. What is the best way to achieve this? Thanks!

  • 写回答

1条回答 默认 最新

  • dongmei8760 2015-12-05 09:59
    关注

    I found a solution using regex that doesn't fully respect domain rules but it works good enough, so if you are planning on using it I would suggest to do additional checks:

    ^(\*\.)?([a-z\d][a-z\d-]*[a-z\d]\.)+[a-z]+$
    

    There is a better way of solving this through PHP:

    $tmp = $domain_to_check;
    if(strpos($tmp, '*.') === 0){
        $tmp = substr($tmp, 2);
    }
    
    if(filter_var('http://' . $tmp, FILTER_VALIDATE_URL)){
        // The format is valid
    }else{
        // The format is invalid
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python