使用正则表达式进行IPv4验证

时间:2014-10-29 11:39:23

标签: jquery regex asp.net-mvc-4 validation

我'我试图通过不引人注意的验证来验证我的表单中的IPv4地址。所有其他验证工作正常,但这个是注意工作。

我定义了这样的属性模型:

[RegularExpression(ipAdressRegEx, ErrorMessageResourceName = "IPInvalid", ErrorMessageResourceType = typeof(Strings))]
public virtual String IP { get; set; }

我的RegEx:

private const string ipAdressRegEx = @"/\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/g";

生成的HTML如下所示:

    <input class="k-textbox" data-val="true" data-val-regex="Invalid IP" 
data-val-regex-pattern="/\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/g" 
id="IP" name="IP" type="text" value="">
<span class="field-validation-valid" data-valmsg-for="IP" data-valmsg-replace="true"></span>

但验证显示错误无效的IP错误消息,例如,ip =&#34; 192.168.1.1&#34;。

如果我将以下内容放入浏览器控制台:

"192.168.1.1".match(/\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/g)

(使用传递给输入验证的模式)它返回IP,这是正确的。

我不明白为什么这种不引人注目的验证在这种情况下不起作用......

我尝试了不同的模式......

5 个答案:

答案 0 :(得分:2)

松开字符串中指定的斜杠和g选项。这些是正则表达式的JavaScript分隔符。通过API传递正则表达式时不需要。

data-val-regex-pattern="\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b" 

答案 1 :(得分:1)

您可以创建像

这样的方法
private boolean checkIp(String ipValue,String regex){
   return ipValue.matches(regex);
}

checkIp(yourIpValue, "^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."
                            + "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."
                            + "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\."
                            + "([01]?\\d\\d?|2[0-4]\\d|25[0-5])$")

答案 2 :(得分:0)

因为我只是认为生成的不引人注目的html html可能会对Regex在客户端和服务器上的行为产生一些问题。这里的文章解释并提供了一些解决方法

http://blogs.msdn.com/b/tilovell/archive/2013/05/08/regular-expressions-are-different-in-javascript-and-unintrusive-validation.aspx

答案 3 :(得分:0)

关注

$("#adressIP, #GatewayInp, #SubnetMask").keyup(function() {
   var input = $(this).val();
   console.log(input);
   var regex = new RegExp('(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$');
   if (regex.test(input)) {
    console.log("match");
   } else {
    console.log("nomatch");
   }
});

答案 4 :(得分:-1)

function ValidateIPaddress(ipaddress)   
{  
    if (/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(ipaddress))  
    {  
        return (true)  
    }  
    alert("You have entered an invalid IP address!")  
    return (false)  
}