牛角 發表於 2021-4-14 00:12:00

Javascript 判断域名合法性,JS域名格式检测

<p>其实域名没法很好的判断,因为后缀不确定,不断的增加。所以能完美的判断还是得不断的更新。</p>
<h2>Javascript 域名判断源码</h2>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> DomainParser(domainName) {
</span><span style="color: rgba(0, 128, 128, 1)">2</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> input =<span style="color: rgba(0, 0, 0, 1)"> domainName;
</span><span style="color: rgba(0, 128, 128, 1)">3</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> modifyName =<span style="color: rgba(0, 0, 0, 1)"> domainName;
</span><span style="color: rgba(0, 128, 128, 1)">4</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> b_error = <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">5</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> message = ""<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">6</span>   DomainParser.prototype.parse = <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
</span><span style="color: rgba(0, 128, 128, 1)">7</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (!input || input.length == 0<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">8</span>             failMessage('请填写域名,例如:sojson.com'<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">9</span>             <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 10</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 11</span>         <span style="color: rgba(0, 0, 255, 1)">var</span> labels =<span style="color: rgba(0, 0, 0, 1)"> parseLabels();
</span><span style="color: rgba(0, 128, 128, 1)"> 12</span>         <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (hasError()) {
</span><span style="color: rgba(0, 128, 128, 1)"> 13</span>             <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 14</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 15</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (labels.length == 1<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)"> 16</span>             failMessage('域名格式错误。请输入正确的域名格式,以“.”进行区分 '<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 17</span>             <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 18</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 19</span>         <span style="color: rgba(0, 0, 255, 1)">var</span> topLabel = labels;
</span><span style="color: rgba(0, 128, 128, 1)"> 20</span>         <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (isDigitLabels(topLabel)) {
</span><span style="color: rgba(0, 128, 128, 1)"> 21</span>             failMessage("域名格式错误。请输入正确的域名格式,以“.”进行区分 "<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 22</span>             <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 23</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 24</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (input.length &gt; 255<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)"> 25</span>             failMessage('域名过长。每标号不得超过63个字符。由多个标号组成的完整域名总共不超过255个字符。'<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 26</span>             <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 27</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 28</span>         <span style="color: rgba(0, 0, 255, 1)">var</span> topLevel =<span style="color: rgba(0, 0, 0, 1)"> parseTopLevel(labels);
</span><span style="color: rgba(0, 128, 128, 1)"> 29</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (topLevel.labelIndex == 0<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)"> 30</span>             failMessage(topLevel.name + '是域名后缀,不能查询。'<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 31</span>             <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 32</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 33</span>         <span style="color: rgba(0, 0, 255, 1)">var</span> secondLevel =<span style="color: rgba(0, 0, 0, 1)"> parseSecondLevel(labels, topLevel);
</span><span style="color: rgba(0, 128, 128, 1)"> 34</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (secondLevel.labelIndex != 0 &amp;&amp;<span style="color: rgba(0, 0, 0, 1)"> topLevel.recognized) {
</span><span style="color: rgba(0, 128, 128, 1)"> 35</span>             modifyName = secondLevel.name + "." +<span style="color: rgba(0, 0, 0, 1)"> topLevel.name;
</span><span style="color: rgba(0, 128, 128, 1)"> 36</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 37</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)"> 38</span>
<span style="color: rgba(0, 128, 128, 1)"> 39</span>   DomainParser.prototype.getModifyName = <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
</span><span style="color: rgba(0, 128, 128, 1)"> 40</span>         <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> modifyName;
</span><span style="color: rgba(0, 128, 128, 1)"> 41</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)"> 42</span>
<span style="color: rgba(0, 128, 128, 1)"> 43</span>   <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> hasError() {
</span><span style="color: rgba(0, 128, 128, 1)"> 44</span>         <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> b_error;
</span><span style="color: rgba(0, 128, 128, 1)"> 45</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)"> 46</span>
<span style="color: rgba(0, 128, 128, 1)"> 47</span>   DomainParser.prototype.hasError =<span style="color: rgba(0, 0, 0, 1)"> hasError;
</span><span style="color: rgba(0, 128, 128, 1)"> 48</span>
<span style="color: rgba(0, 128, 128, 1)"> 49</span>   DomainParser.prototype.getMessage = <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
</span><span style="color: rgba(0, 128, 128, 1)"> 50</span>         <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (hasError()) {
</span><span style="color: rgba(0, 128, 128, 1)"> 51</span>             <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> message;
</span><span style="color: rgba(0, 128, 128, 1)"> 52</span>         } <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 53</span>             <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 54</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 55</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)"> 56</span>
<span style="color: rgba(0, 128, 128, 1)"> 57</span>   <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> parseLabels() {
</span><span style="color: rgba(0, 128, 128, 1)"> 58</span>         <span style="color: rgba(0, 0, 255, 1)">var</span> labels = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Array();
</span><span style="color: rgba(0, 128, 128, 1)"> 59</span>         <span style="color: rgba(0, 0, 255, 1)">var</span> offset = 0<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 60</span>         <span style="color: rgba(0, 0, 255, 1)">while</span> (offset &lt;<span style="color: rgba(0, 0, 0, 1)"> input.length) {
</span><span style="color: rgba(0, 128, 128, 1)"> 61</span>             <span style="color: rgba(0, 0, 255, 1)">var</span> label =<span style="color: rgba(0, 0, 0, 1)"> parseLabel();
</span><span style="color: rgba(0, 128, 128, 1)"> 62</span>             <span style="color: rgba(0, 0, 255, 1)">if</span> (!hasError() &amp;&amp;<span style="color: rgba(0, 0, 0, 1)"> label) {
</span><span style="color: rgba(0, 128, 128, 1)"> 63</span> <span style="color: rgba(0, 0, 0, 1)">                labels.push(label);
</span><span style="color: rgba(0, 128, 128, 1)"> 64</span>             } <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 65</span>               <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 66</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)"> 67</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 68</span>         <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> labels;
</span><span style="color: rgba(0, 128, 128, 1)"> 69</span>
<span style="color: rgba(0, 128, 128, 1)"> 70</span>         <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> parseLabel() {
</span><span style="color: rgba(0, 128, 128, 1)"> 71</span>             <span style="color: rgba(0, 0, 255, 1)">var</span> labelArr = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> Array();
</span><span style="color: rgba(0, 128, 128, 1)"> 72</span>             <span style="color: rgba(0, 0, 255, 1)">var</span> start =<span style="color: rgba(0, 0, 0, 1)"> offset;
</span><span style="color: rgba(0, 128, 128, 1)"> 73</span>             <span style="color: rgba(0, 0, 255, 1)">while</span> (offset &lt;<span style="color: rgba(0, 0, 0, 1)"> input.length) {
</span><span style="color: rgba(0, 128, 128, 1)"> 74</span>               <span style="color: rgba(0, 0, 255, 1)">var</span> ch =<span style="color: rgba(0, 0, 0, 1)"> input.charAt(offset);
</span><span style="color: rgba(0, 128, 128, 1)"> 75</span>               <span style="color: rgba(0, 0, 255, 1)">var</span> invalid = <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 76</span>               <span style="color: rgba(0, 0, 255, 1)">if</span> (start == offset &amp;&amp; !<span style="color: rgba(0, 0, 0, 1)">isLetterOrDigit(ch)) {
</span><span style="color: rgba(0, 128, 128, 1)"> 77</span>                     invalid = <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 78</span>               } <span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> ((offset + 1 == input.length || input.charAt(offset + 1) == '.') &amp;&amp; !<span style="color: rgba(0, 0, 0, 1)">isLetterOrDigit(ch)) {
</span><span style="color: rgba(0, 128, 128, 1)"> 79</span>                     invalid = <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 80</span>               } <span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 0, 1)">isLabelChar(ch)) {
</span><span style="color: rgba(0, 128, 128, 1)"> 81</span>                     invalid = <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 82</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)"> 83</span>               <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (invalid) {
</span><span style="color: rgba(0, 128, 128, 1)"> 84</span>                     failMessage('格式错误。域名一般由英文字母、汉字、阿拉伯数字、"-"组成,用“.”分隔,且每段不能以“.”、"-”开头和结尾'<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 85</span>                     <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 86</span>               } <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 87</span> <span style="color: rgba(0, 0, 0, 1)">                  labelArr.push(ch);
</span><span style="color: rgba(0, 128, 128, 1)"> 88</span>                     offset++<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 89</span>                     <span style="color: rgba(0, 0, 255, 1)">if</span> ((offset &lt; input.length &amp;&amp; input.charAt(offset) == '.') || (offset ==<span style="color: rgba(0, 0, 0, 1)"> input.length)) {
</span><span style="color: rgba(0, 128, 128, 1)"> 90</span>                         <span style="color: rgba(0, 0, 255, 1)">if</span> (offset &lt; input.length &amp;&amp; input.charAt(offset) == '.'<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)"> 91</span>                           offset++<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 92</span> <span style="color: rgba(0, 0, 0, 1)">                        }
</span><span style="color: rgba(0, 128, 128, 1)"> 93</span>                         <span style="color: rgba(0, 0, 255, 1)">if</span> (labelArr.length &gt; 63<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)"> 94</span>                           failMessage('域名过长。每标号不得超过63个字符。由多个标号组成的完整域名总共不超过255个字符。'<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 95</span>                           <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 96</span> <span style="color: rgba(0, 0, 0, 1)">                        }
</span><span style="color: rgba(0, 128, 128, 1)"> 97</span>                         <span style="color: rgba(0, 0, 255, 1)">return</span> labelArr.join(""<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)"> 98</span> <span style="color: rgba(0, 0, 0, 1)">                  }
</span><span style="color: rgba(0, 128, 128, 1)"> 99</span>
<span style="color: rgba(0, 128, 128, 1)">100</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)">101</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">102</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">103</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">104</span>
<span style="color: rgba(0, 128, 128, 1)">105</span>   <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> isLabelChar(ch) {
</span><span style="color: rgba(0, 128, 128, 1)">106</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (ch.charCodeAt(0) &lt;= 127<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">107</span>             <span style="color: rgba(0, 0, 255, 1)">if</span> ((ch &gt;= 'A' &amp;&amp; ch &lt;= 'Z') || (ch &gt;= 'a' &amp;&amp; ch &lt;= 'z') || (ch &gt;= '0' &amp;&amp; ch &lt;= '9') || (ch == '-'<span style="color: rgba(0, 0, 0, 1)">)) {
</span><span style="color: rgba(0, 128, 128, 1)">108</span>               <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">109</span>             } <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">110</span>               <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">111</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">112</span>         } <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">113</span>             <span style="color: rgba(0, 0, 255, 1)">if</span> ((ch.charCodeAt(0) &gt;= 0xFF00 &amp;&amp; ch.charCodeAt(0) &lt;= 0xFFEF) ||
<span style="color: rgba(0, 128, 128, 1)">114</span>               (ch.charCodeAt(0) &gt;= 0x3000 &amp;&amp; ch.charCodeAt(0) &lt;= 0x303F<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">115</span> <span style="color: rgba(0, 0, 0, 1)">            ) {
</span><span style="color: rgba(0, 128, 128, 1)">116</span>               <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">117</span>             } <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">118</span>               <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">119</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">120</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">121</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">122</span>
<span style="color: rgba(0, 128, 128, 1)">123</span>   <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> isLetterOrDigit(ch) {
</span><span style="color: rgba(0, 128, 128, 1)">124</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (ch.charCodeAt(0) &lt;= 127<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">125</span>             <span style="color: rgba(0, 0, 255, 1)">if</span> ((ch &gt;= 'A' &amp;&amp; ch &lt;= 'Z') || (ch &gt;= 'a' &amp;&amp; ch &lt;= 'z') || (ch &gt;= '0' &amp;&amp; ch &lt;= '9'<span style="color: rgba(0, 0, 0, 1)">)) {
</span><span style="color: rgba(0, 128, 128, 1)">126</span>               <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">127</span>             } <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">128</span>               <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">129</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">130</span>         } <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">131</span>             <span style="color: rgba(0, 0, 255, 1)">if</span> ((ch.charCodeAt(0) &gt;= 0xFF00 &amp;&amp; ch.charCodeAt(0) &lt;= 0xFFEF) ||
<span style="color: rgba(0, 128, 128, 1)">132</span>               (ch.charCodeAt(0) &gt;= 0x3000 &amp;&amp; ch.charCodeAt(0) &lt;= 0x303F<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">133</span> <span style="color: rgba(0, 0, 0, 1)">            ) {
</span><span style="color: rgba(0, 128, 128, 1)">134</span>               <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">135</span>             } <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">136</span>               <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">137</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">138</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">139</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">140</span>
<span style="color: rgba(0, 128, 128, 1)">141</span>   <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> isDigitLabels(label) {
</span><span style="color: rgba(0, 128, 128, 1)">142</span>         <span style="color: rgba(0, 0, 255, 1)">var</span> i = 0<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">143</span>         <span style="color: rgba(0, 0, 255, 1)">while</span> (i &lt;<span style="color: rgba(0, 0, 0, 1)"> label.length) {
</span><span style="color: rgba(0, 128, 128, 1)">144</span>             <span style="color: rgba(0, 0, 255, 1)">var</span> ch =<span style="color: rgba(0, 0, 0, 1)"> label.charAt(i);
</span><span style="color: rgba(0, 128, 128, 1)">145</span>             <span style="color: rgba(0, 0, 255, 1)">if</span> (!(ch &gt;= '0' &amp;&amp; ch &lt;= '9'<span style="color: rgba(0, 0, 0, 1)">)) {
</span><span style="color: rgba(0, 128, 128, 1)">146</span>               <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">147</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">148</span>             i++<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">149</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">150</span>         <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">151</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">152</span>
<span style="color: rgba(0, 128, 128, 1)">153</span>   <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> parseTopLevel(labels) {
</span><span style="color: rgba(0, 128, 128, 1)">154</span>         <span style="color: rgba(0, 0, 255, 1)">var</span> topLevelName = ""<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">155</span>         <span style="color: rgba(0, 0, 255, 1)">var</span> lowTopLevelName = ""<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">156</span>         <span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)"> topLevel;
</span><span style="color: rgba(0, 128, 128, 1)">157</span>         <span style="color: rgba(0, 0, 255, 1)">var</span><span style="color: rgba(0, 0, 0, 1)"> index;
</span><span style="color: rgba(0, 128, 128, 1)">158</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (labels.length &gt;= 2<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">159</span>             topLevelName = labels + "." + labels;
</span><span style="color: rgba(0, 128, 128, 1)">160</span>             lowTopLevelName =<span style="color: rgba(0, 0, 0, 1)"> topLevelName.toLowerCase();
</span><span style="color: rgba(0, 128, 128, 1)">161</span>             <span style="color: rgba(0, 0, 255, 1)">for</span> (index = 0; index &lt; tow_top_level.length; index++<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">162</span>               <span style="color: rgba(0, 0, 255, 1)">if</span> (lowTopLevelName ==<span style="color: rgba(0, 0, 0, 1)"> tow_top_level) {
</span><span style="color: rgba(0, 128, 128, 1)">163</span>                     topLevel = <span style="color: rgba(0, 0, 255, 1)">new</span> TopLevel(topLevelName, 2, labels.length - 2, <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">164</span>                     <span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">165</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)">166</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">167</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">168</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 0, 1)">topLevel) {
</span><span style="color: rgba(0, 128, 128, 1)">169</span>             topLevelName = labels;
</span><span style="color: rgba(0, 128, 128, 1)">170</span>             lowTopLevelName =<span style="color: rgba(0, 0, 0, 1)"> topLevelName.toLowerCase();
</span><span style="color: rgba(0, 128, 128, 1)">171</span>             <span style="color: rgba(0, 0, 255, 1)">for</span> (index = 0; index &lt; one_top_level.length; index++<span style="color: rgba(0, 0, 0, 1)">) {
</span><span style="color: rgba(0, 128, 128, 1)">172</span>               <span style="color: rgba(0, 0, 255, 1)">if</span> (lowTopLevelName ==<span style="color: rgba(0, 0, 0, 1)"> one_top_level) {
</span><span style="color: rgba(0, 128, 128, 1)">173</span>                     topLevel = <span style="color: rgba(0, 0, 255, 1)">new</span> TopLevel(topLevelName, 1, labels.length - 1, <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">174</span>                     <span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">175</span> <span style="color: rgba(0, 0, 0, 1)">                }
</span><span style="color: rgba(0, 128, 128, 1)">176</span> <span style="color: rgba(0, 0, 0, 1)">            }
</span><span style="color: rgba(0, 128, 128, 1)">177</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">178</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 0, 1)">topLevel) {
</span><span style="color: rgba(0, 128, 128, 1)">179</span>             topLevelName = labels;
</span><span style="color: rgba(0, 128, 128, 1)">180</span>             topLevel = <span style="color: rgba(0, 0, 255, 1)">new</span> TopLevel(topLevelName, 1, labels.length - 1, <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">181</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">182</span>         <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> topLevel;
</span><span style="color: rgba(0, 128, 128, 1)">183</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">184</span>
<span style="color: rgba(0, 128, 128, 1)">185</span>   <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> TopLevel(name, labelCount, labelIndex, recognized) {
</span><span style="color: rgba(0, 128, 128, 1)">186</span>         <span style="color: rgba(0, 0, 255, 1)">this</span>.name =<span style="color: rgba(0, 0, 0, 1)"> name;
</span><span style="color: rgba(0, 128, 128, 1)">187</span>         <span style="color: rgba(0, 0, 255, 1)">this</span>.labelCount =<span style="color: rgba(0, 0, 0, 1)"> labelCount;
</span><span style="color: rgba(0, 128, 128, 1)">188</span>         <span style="color: rgba(0, 0, 255, 1)">this</span>.labelIndex =<span style="color: rgba(0, 0, 0, 1)"> labelIndex;
</span><span style="color: rgba(0, 128, 128, 1)">189</span>         <span style="color: rgba(0, 0, 255, 1)">this</span>.recognized =<span style="color: rgba(0, 0, 0, 1)"> recognized;
</span><span style="color: rgba(0, 128, 128, 1)">190</span>         <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">191</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">192</span>
<span style="color: rgba(0, 128, 128, 1)">193</span>   <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> parseSecondLevel(labels, topLevel) {
</span><span style="color: rgba(0, 128, 128, 1)">194</span>         <span style="color: rgba(0, 0, 255, 1)">var</span> secondLevel = <span style="color: rgba(0, 0, 255, 1)">new</span> SecondLevel(labels, 1, topLevel.labelIndex - 1<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">195</span>         <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> secondLevel;
</span><span style="color: rgba(0, 128, 128, 1)">196</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">197</span>
<span style="color: rgba(0, 128, 128, 1)">198</span>   <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> SecondLevel(name, labelCount, labelIndex) {
</span><span style="color: rgba(0, 128, 128, 1)">199</span>         <span style="color: rgba(0, 0, 255, 1)">this</span>.name =<span style="color: rgba(0, 0, 0, 1)"> name;
</span><span style="color: rgba(0, 128, 128, 1)">200</span>         <span style="color: rgba(0, 0, 255, 1)">this</span>.labelCount =<span style="color: rgba(0, 0, 0, 1)"> labelCount;
</span><span style="color: rgba(0, 128, 128, 1)">201</span>         <span style="color: rgba(0, 0, 255, 1)">this</span>.labelIndex =<span style="color: rgba(0, 0, 0, 1)"> labelIndex;
</span><span style="color: rgba(0, 128, 128, 1)">202</span>         <span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">203</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">204</span>
<span style="color: rgba(0, 128, 128, 1)">205</span>   <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> failMessage(msg) {
</span><span style="color: rgba(0, 128, 128, 1)">206</span>         message =<span style="color: rgba(0, 0, 0, 1)"> msg;
</span><span style="color: rgba(0, 128, 128, 1)">207</span>         b_error = <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">208</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">209</span>
<span style="color: rgba(0, 128, 128, 1)">210</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> one_top_level = ['ac', 'ad', 'ae', 'aero', 'af', 'ag', 'ai', 'al', 'am', 'an', 'ao', 'aq'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">211</span>         'ar', 'arpa', 'as', 'asia', 'at', 'au', 'aw', 'ax', 'az', 'ba', 'bb', 'bd'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">212</span>         'be', 'bf', 'bg', 'bh', 'bi', 'biz', 'bj', 'bl', 'bm', 'bn', 'bo', 'bq'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">213</span>         'br', 'bs', 'bt', 'bv', 'bw', 'by', 'bz', 'ca', 'cat', 'cc', 'cd', 'cf'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">214</span>         'cg', 'ch', 'ci', 'ck', 'cl', 'cm', 'cn', 'co', 'com', 'coop', 'cr', 'cu'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">215</span>         'cv', 'cw', 'cx', 'cy', 'cz', 'de', 'dj', 'dk', 'dm', 'do', 'dz', 'ec'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">216</span>         'edu', 'ee', 'eg', 'eh', 'er', 'es', 'et', 'eu', 'fi', 'fj', 'fk', 'fm'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">217</span>         'fo', 'fr', 'ga', 'gb', 'gd', 'ge', 'gf', 'gg', 'gh', 'gi', 'gl', 'gm'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">218</span>         'gn', 'gov', 'gp', 'gq', 'gr', 'gs', 'gt', 'gu', 'gw', 'gy', 'hk', 'hm'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">219</span>         'hn', 'hr', 'ht', 'hu', 'id', 'ie', 'il', 'im', 'in', 'info', 'int'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">220</span>         'io', 'iq', 'ir', 'is', 'it', 'je', 'jm', 'jo', 'jobs', 'jp', 'ke'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">221</span>         'kg', 'kh', 'ki', 'km', 'kn', 'kp', 'kr', 'kw', 'ky', 'kz', 'la'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">222</span>         'lb', 'lc', 'li', 'lk', 'lr', 'ls', 'lt', 'lu', 'lv', 'ly', 'ma', 'mc'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">223</span>         'md', 'me', 'mf', 'mg', 'mh', 'mil', 'mk', 'ml', 'mm', 'mn', 'mo'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">224</span>         'mobi', 'mp', 'mq', 'mr', 'ms', 'mt', 'mu', 'museum', 'mv', 'mw'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">225</span>         'mx', 'my', 'mz', 'na', 'name', 'nc', 'ne', 'net', 'nf', 'ng'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">226</span>         'ni', 'nl', 'no', 'np', 'nr', 'nu', 'nz', 'om', 'org', 'pa'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">227</span>         'pe', 'pf', 'pg', 'ph', 'pk', 'pl', 'pm', 'pn', 'post', 'pr'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">228</span>         'pro', 'ps', 'pt', 'pw', 'py', 'qa', 're', 'ro', 'rs', 'ru'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">229</span>         'rw', 'sa', 'sb', 'sc', 'sd', 'se', 'sg', 'sh', 'si', 'sj'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">230</span>         'sk', 'sl', 'sm', 'sn', 'so', 'sr', 'ss', 'st', 'su', 'sv', 'sx'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">231</span>         'sy', 'sz', 'tc', 'td', 'tel', 'tf', 'tg', 'th', 'tj', 'tk', 'tl'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">232</span>         'tm', 'tn', 'to', 'tp', 'tr', 'travel', 'tt', 'tv', 'tw', 'tz'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">233</span>         'ua', 'ug', 'uk', 'um', 'us', 'uy', 'uz', 'va', 'vc', 've', 'vg'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">234</span>         'vi', 'vn', 'vu', 'wf', 'ws', '中国', '中國', '香港', '台湾', '台灣'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">235</span>         '新加坡', 'xxx', 'ye', 'yt', 'za', 'zm', 'zw', 'zw', 'xn--fiqs8s'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">236</span>         'xn--fiqz9s', 'xn--j6w193g', 'xn--kprw13d', 'xn--kpry57d'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">237</span>         'xn--yfro4i67o', '公司', '网络', '網絡', 'xn--55qx5d', 'xn--io0a7i'
<span style="color: rgba(0, 128, 128, 1)">238</span> <span style="color: rgba(0, 0, 0, 1)">    ];
</span><span style="color: rgba(0, 128, 128, 1)">239</span>   <span style="color: rgba(0, 0, 255, 1)">var</span> tow_top_level = ['ac.cn', 'com.cn', 'edu.cn', 'gov.cn', 'mil.cn', 'net.cn', 'org.cn', 'bj.cn'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">240</span>         'sh.cn', 'tj.cn', 'cq.cn', 'he.cn', 'sx.cn', 'nm.cn', 'ln.cn', 'jl.cn'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">241</span>         'hl.cn', 'js.cn', 'zj.cn', 'ah.cn', 'fj.cn', 'jx.cn', 'sd.cn', 'ha.cn'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">242</span>         'hb.cn', 'hn.cn', 'gd.cn', 'gx.cn', 'hi.cn', 'sc.cn', 'gz.cn', 'yn.cn'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">243</span>         'xz.cn', 'sn.cn', 'gs.cn', 'qh.cn', 'nx.cn', 'xj.cn', 'tw.cn', 'hk.cn'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">244</span>         'mo.cn', 'com.af', 'net.af', 'org.af', 'com.ag', 'net.ag', 'org.ag', 'co.at'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">245</span>         'or.at', 'com.bi', 'edu.bi', 'info.bi', 'mo.bi', 'or.bi', 'org.bi', 'com.br'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">246</span>         'net.br', 'org.br', 'co.bz', 'com.bz', 'net.bz', 'org.bz', 'co.cm', 'com.cm'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">247</span>         'net.cm', 'com.co', 'net.co', 'nom.co', 'ar.com', 'br.com', 'cn.com', 'de.com'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">248</span>         'eu.com', 'gb.com', 'gr.com', 'hu.com', 'jpn.com', 'kr.com', 'no.com'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">249</span>         'ru.com', 'se.com', 'uk.com', 'us.com', 'za.com', 'com.de', 'co.dm', 'com.ec'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">250</span>         'fin.ec', 'info.ec', 'med.ec', 'net.ec', 'pro.ec', 'com.es', 'nom.es'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">251</span>         'org.es', 'co.gg', 'net.gg', 'org.gg', 'co.gl', 'com.gl', 'edu.gl', 'net.gl'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">252</span>         'org.gl', 'com.gr', 'co.gy', 'com.gy', 'net.gy', 'com.hk', 'edu.hk', 'gov.hk'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">253</span>         'idv.hk', 'net.hk', 'org.hk', 'com.hn', 'net.hn', 'org.hn', 'adult.ht', 'com.ht'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">254</span>         'info.ht', 'net.ht', 'org.ht', 'org.il', 'co.in', 'firm.in', 'gen.in', 'ind.in'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">255</span>         'net.in', 'org.in', 'bz.it', 'co.it', 'co.je', 'net.je', 'org.je', 'com.ki'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">256</span>         'net.ki', 'org.ki', 'co.kr', 'ne.kr', 'or.kr', 'pe.kr', 're.kr', 'seoul.kr'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">257</span>         'com.lc', 'net.lc', 'org.lc', 'co.mg', 'com.mg', 'net.mg', 'org.mg', 'ac.mu'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">258</span>         'co.mu', 'com.mu', 'net.mu', 'org.mu', 'com.mx', 'gb.net', 'hu.net', 'jp.net'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">259</span>         'se.net', 'uk.net', 'com.nf', 'net.nf', 'org.nf', 'co.nl', 'net.nz', 'org.nz'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">260</span>         'ae.org', 'us.org', 'com.pe', 'net.pe', 'org.pe', 'com.ph', 'com.pk', 'net.pk'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">261</span>         'org.pk', 'biz.pl', 'com.pl', 'info.pl', 'net.pl', 'org.pl', 'waw.pl', 'aaa.pro'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">262</span>         'aca.pro', 'acct.pro', 'avocat.pro', 'bar.pro', 'cpa.pro', 'eng.pro', 'jur.pro'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">263</span>         'law.pro', 'med.pro', 'recht.pro', 'com.ps', 'net.ps', 'org.ps', 'com.pt', 'edu.pt'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">264</span>         'org.pt', 'com.ru', 'net.sb', 'org.sb', 'com.sc', 'net.sc', 'org.sc', 'com.sg'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">265</span>         'com.so', 'net.so', 'org.so', 'club.tw', 'com.tw', 'ebiz.tw', 'game.tw', 'idv.tw'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">266</span>         'org.tw', 'me.uk', 'org.uk', 'co.uz', 'com.uz', 'com.vc', 'net.vc', 'org.vc'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">267</span>         'ac.vn', 'biz.vn', 'com.vn', 'edu.vn', 'gov.vn', 'health.vn', 'info.vn', 'int.vn'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)">268</span>         'name.vn', 'net.vn', 'org.vn', 'pro.vn'
<span style="color: rgba(0, 128, 128, 1)">269</span> <span style="color: rgba(0, 0, 0, 1)">    ];
</span><span style="color: rgba(0, 128, 128, 1)">270</span> }</pre>
</div>
<p>&nbsp;</p>
<h2>Javascript 域名判断使用方法</h2>
<p class="L0"><code><span class="kwd">var<span class="pln"> domain <span class="pun">=<span class="str">"sojson.com"<span class="pun">;</span></span></span></span></span></code></p>
<p class="L1"><code><span class="kwd">var<span class="pln"> parser <span class="pun">=<span class="pln"> <span class="kwd">new<span class="pln"> <span class="typ">DomainParser<span class="pun">(<span class="pln">domain<span class="pun">);</span></span></span></span></span></span></span></span></span></span></code></p>
<p class="L2"><code><span class="com">//解析</span></code></p>
<p class="L3"><code><span class="pln">parser<span class="pun">.<span class="pln">parse<span class="pun">();</span></span></span></span></code></p>
<p class="L4"><code><span class="com">//判断是否正常</span></code></p>
<p class="L5"><code><span class="kwd">if<span class="pln"> <span class="pun">(<span class="pln">parser<span class="pun">.<span class="pln">hasError<span class="pun">())<span class="pln"> <span class="pun">{</span></span></span></span></span></span></span></span></span></code></p>
<p class="L6"><code><span class="pln"> <span class="com">//错误信息</span></span></code></p>
<p class="L7"><code><span class="pln"> <span class="kwd">var<span class="pln"> msg <span class="pun">=<span class="pln"> parser<span class="pun">.<span class="pln">getMessage<span class="pun">();</span></span></span></span></span></span></span></span></code></p>
<p class="L8"><code><span class="pln"> <span class="kwd">return<span class="pun">;</span></span></span></code></p>
<p class="L9"><code><span class="pun">}</span></code></p>
<p class="L0"><code><span class="com">//获取域名</span></code></p>
<p class="L0"><code><span class="pln">domain <span class="pun">=<span class="pln"> encodeURI<span class="pun">(<span class="pln">parser<span class="pun">.<span class="pln">getModifyName<span class="pun">());</span></span></span></span></span></span></span></span></code></p><br><br>
来源:https://www.cnblogs.com/zzsdream/p/14656016.html
頁: [1]
查看完整版本: Javascript 判断域名合法性,JS域名格式检测