javascript - 带八位字节通配符和范围的 IP 地址

标签 javascript html regex ip-address

我使用这个模式来检查一个字段的形式是否是一个 IP 地址:

function verifyIP (IPvalue) {
    errorString = "";
    theName = "IPaddress";

    var ipPattern = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
    var ipArray = IPvalue.match(ipPattern);

    if (IPvalue == "0.0.0.0") {
        errorString = errorString + theName + ': '+IPvalue+' is a special IP address and cannot be used here.';
    } else if (IPvalue == "255.255.255.255") {
        errorString = errorString + theName + ': '+IPvalue+' is a special IP address and cannot be used here.';
    } if (ipArray == null) {
        errorString = errorString + theName + ': '+IPvalue+' is not a valid IP address.';
    } else {
        for (i = 0; i < 4; i++) {
            thisSegment = ipArray[i];
            if (thisSegment > 255) {
                errorString = errorString + theName + ': '+IPvalue+' is not a valid IP address.';
                i = 4;
            }

            if ((i == 0) && (thisSegment > 255)) {
                errorString = errorString + theName + ': '+IPvalue+' is a special IP address and cannot be used here.';
                i = 4;
            }

            if (thisSegment.toString() == "*")
                errorString = "";
            }
        }

        extensionLength = 3;
        if (errorString == "")
            alert ("That is a valid IP address.");
        else
            alert (errorString);
    }
}

但我需要考虑具有带星号“*”或范围“0-255”的八位字节的字段的值。

例如:

192.168.1.1 --> It will be OK
192.168.*.* --> It will be OK
192.168.2-3.0-128 --> It will be OK
192.168.2-3.* --> It will be OK

有什么想法吗?非常感谢!

最佳答案

对于您提供的特定输入字符串,从以下内容开始:

^(\d{1,3})\.(\d{1,3})\.(\*|(?:\d{1,3}(?:-\d{1,3})?))\.(\*|(?:\d{1,3}(?:-\d{1,3})?))$

Regular expression visualization

Debuggex Demo

在您的 JavaScript 中,这将变为:

var ipPattern = /^(\d{1,3})\.(\d{1,3})\.(\*|(?:\d{1,3}(?:-\d{1,3})?))\.(\*|(?:\d{1,3}(?:-\d{1,3})?))$/;

当然,您可以进一步消除模式中的重复,但这将使从您提供的内容开始的演变更加不清晰:从更冗长、重复的模式开始;进行可靠的正面和负面测试;然后重构以根据需要/期望消除重复。

关于javascript - 带八位字节通配符和范围的 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31926178/

相关文章:

java - 如何使用正则表达式从线性表达式的特定部分提取运算符

Java正则表达式,多项式的分离度和系数

javascript - 如何在 Javascript 中动态更新背景图像大小

javascript - 移动设备在网站下方滚动

javascript - 按最小长度、最大长度、电子邮件、数字、必需等方式验证表格。angular 2

javascript - 当图像在 Angular 中不可用时加载图像或显示字母

html - 如何消除 HTML 页面的闪烁?

javascript - 如何在 Javascript 中捕获 404 错误?

javascript - querySelectorAll 不起作用?

.net - 将 PascalCase 字符串拆分为单独的单词