1. 程式人生 > >效率最快的 IPv4 和 IPv6 正則表示式

效率最快的 IPv4 和 IPv6 正則表示式

IPv4 正則規則

  IPv4 地址例如,”192.168.0.2“,為 . 分割的4段數字,數字範圍為 0 - 255,而我們的正則表示式需要匹配的就是 0 - 255,首先我們對這一區間進行拆分:
1. 0 - 9 只有一位數字,正則表示式:\d
2. 10 - 99 二位數,十位數1 - 9,個位數 0 - 9,正則表示式:[1-9]\d
3. 100 - 199,百位數 1,十位數個位數均為 0 - 9,正則表示式:1\d\d
4. 200 - 249,百位數 2,十位數 0 - 4,個位數 0 - 9,正則表示式:2[0-4]\d
5. 250 - 255,百位數 2,十位數5,個位數 0 - 5,正則表示式:25[0-5]

步驟4、5可以進行一次整合:2([0-4]\d|5[0-5])(200 - 255)。

綜上在結合 . 這個連線符,在IP最後手動填上一個 . 就可以重複4次,最後的正則表示式為:

    var ipv4 = /^()(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5]))\.){4}$/;
    return ipv4.test(IP + ".");

IPv6 正則規則

  IPv6 地址例如,”2001:0db8:85a3:0000:0000:8a2e:0370:7334“,為 : 分割的8段數字,每段數字最多4位,最少1位,每位可由 0-9數字、a-f 小寫字母、A-F 大寫字母組成,與 IPv4 一樣為了簡略正則表示式,在IP後手動填上一個 :。

var ipv6 = /^(([\da-fA-F]{1,4}):){8}$/
return ipv6.test(IP + ":");

原題來自 leetcode 第468題(Validate IP Address),題意為設計一個函式檢測 IP 是 IPv4 還是 IPv6。

/**
 * @param {string} IP
 * @return {string}
 */
var validIPAddress = function(IP) {
    var ipv4 = /^((\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5]))\.){4}$/;
    var ipv6 = /^(([\da-fA-F]{1
,4}):){8}$/ return ipv4.test(IP + ".") ? "IPv4" : ipv6.test(IP + ":") ? "IPv6" : "Neither"; };

這裡寫圖片描述

擊敗 100% 的 JavaScript 程式~