【问题标题】:cpp check if the string is a valid domain name?cpp 检查字符串是否是有效的域名?
【发布时间】:2011-08-17 18:41:23
【问题描述】:

如标题所述,有没有快速的方法来做到这一点?我不需要一个可靠的解决方案,任何可以区分的东西,例如:

http://asdasd/

不是一个有效的域名,其中

http://asd.asdasd.asd

是一个有效的域名。

我试图搜索解决方案,最接近(简单)的解决方案是:in python

但这就是python,我需要用c++来做。有什么帮助吗?

只能通过“字符串操作”来完成吗?比如,子字符串?

【问题讨论】:

  • 正则表达式?正如 Raymond Chen 所说,“现在你有两个问题”
  • hmmm.. 除了正则表达式?我从图书馆看到一本书,很厚,只是为了正则表达式。我以后会研究它,但不是现在,我2天前才开始使用c++
  • 好吧,如果你想真正正确,请查看 rfc 并为那里提到的语法实施解析器
  • Lexer(解析器)和状态机?
  • Quib​​ble: http:// 不是域名的一部分;域名是"asd.asdasd.asd"。更大的狡辩:"asdasd" 一个有效的域名。如果您在foo.example.com 上,并且有一个名为asdasd.example.com 的主机,根据配置,您可以将其称为"asdasd"。需要明确的是,即使没有实际的 asd TLD(顶级域),您也认为 asd.asdasd 是“有效的”,对吧?

标签: c++ validation dns


【解决方案1】:

我相信这可以通过libcurl 完成。

【讨论】:

    【解决方案2】:

    考虑到http://... 不是域名而是 URL,如果设置为搜索域(例如在本地网络上),asdasd 是有效的域名,然后可以使用一组简单的strncmpstrchrstrstr 命令来完成对字符串语法的纯粹检查

    char *str = "http://abd.xxx";
    
    bool valid = strncmp(str,"http://",7) && str[7] && strchr(str+7,'.');
    

    这应该检查字符串是否以 http:// 开头,并且在 http:// 之后还有更多内容,并且之后的内容是否包含点 - 如果您还想处理 URL 包含实际路径的位置比如http://expample.com/mypath.txt,那么这个例子会变得更复杂,但你没有指定是否需要。

    或者,您可以 use regex 和您从 python 答案中获得的模式指向您自己

    【讨论】:

    • 它可能是一个有效的本地主机名,但它也是一个潜在的有效 FQDN,因为引入了任意 TLD。
    • 这里没有异议——真正确定名称是否有效的唯一方法是进行主机查找——但这不是 OP 所要求的——问题只是匹配模式。
    • 我认为这是对这个问题的正确答案:“可以使用字符串操作来完成吗?” “不,需要主机查找。”
    • @Ben——那么你应该把它作为你的答案——我可能会投票赞成:-)
    猜你喜欢
    • 2018-03-21
    • 2013-02-13
    • 2020-10-15
    • 2019-05-05
    • 2019-10-04
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多