4.3.2 主机名称验证

来源:互联网 发布:天龙八部挂机软件 编辑:程序博客网 时间:2024/05/01 06:15

  互联网上的主机名称一般由单词字符和字符.组成,如myhost.comwname.net123.cn等。

主机名称被字符.分割,被分割的每一个字符串由单词字符组成,但是字符-不能是该字符串的第一个字符或者最后一个字符。另外,被分割后的每一个字符串最大长度为63、最小长度为1。以下正则表达式能够验证被分割后的每一个字符串。其中,长度为1的字符串由表达式[a-zA-Z0-9]匹配,长度大于1的字符串由表达式[a-zA-Z0-9]/w{0,61}[a-zA-Z0-9])匹配。

([a-zA-Z0-9]/w{0,61}[a-zA-Z0-9])|[a-zA-Z0-9]                              56

  正则表达式(56)解释:

      [a-zA-Z0-9]能够匹配除了字符-之外的任何单词字符。

      /w{0,61}可以匹配由单词字符组成的、最小长度为0的、最大长度为61的字符串。

  使用上述正则表达式,可以扩展为验证主机名称的正则表达式。以下正则表达式能够简单验证主机名称。

(([a-zA-Z0-9]/w{0,61}[a-zA-Z0-9]/.)|([a-zA-Z0-9]/.))*(([a-zA-Z0-9]/w{0,61}[a-zA-Z0-9])|[a-zA-Z0-9])     57

  正则表达式(57)解释:

      [a-zA-Z0-9]能够匹配除了字符-之外的任何单词字符。

      /w{0,61}可以匹配由单词字符组成的、最小长度为0的、最大长度为61的字符串。

      /.匹配字符.

      (([a-zA-Z0-9]/w{0,61}[a-zA-Z0-9]/.)|([a-zA-Z0-9]/.))*可以匹配至少重复“被分割后的每一个字符串+字符.0次的字符串。

  使用工具Regex Tester测试正则表达式(57),结果如图所示。

 

 

 

  然而,在目前网络的主机名称中,被分割后的最后一个字符串是有限的,而不是由单词字符串组成的任意字符串。如comedugovmillnetorgnetcn等。正则表达式(([a-zA-Z0-9]/w{0,61}[a-zA-Z0-9]/.)|([a-zA-Z0-9]/.))*(([a-zA-Z0-9]/w{0,61}[a-zA-Z0-9])|[a-zA-Z0-9])仅仅能够简单验证主机名称。以下正则表达式能够精确验证主机名称。

(([a-zA-Z0-9]/w{0,61}[a-zA-Z0-9]/.)|([a-zA-Z0-9]/.))*(com|edu|gov|int|mil|net|org|biz|info|name|museum|coop|aero|[a-z][a-z])                          58

  正则表达式(58)解释:

      [a-zA-Z0-9]能够匹配除了字符-之外的任何单词字符。

      /w{0,61}可以匹配由单词字符组成的、最小长度为0的、最大长度为61的字符串。

      /.匹配字符.

      (([a-zA-Z0-9]/w{0,61}[a-zA-Z0-9]/.)|([a-zA-Z0-9]/.))*可以匹配至少重复“被分割后的每一个字符串+字符.0次的字符串。

      com|edu|gov|int|mil|net|org|biz|info|name|museum|coop|aero|[a-z][a-z]可以匹配给定的字符串(如comedugovmillnetorgnet等)或者由字母组成的长度为2的字符串。

  使用工具Regex Tester测试正则表达式正则表达式(58),结果如图所示。