2012-06-06 63 views
1

我想写一个验证IPv4地址的函数。Ipv4验证Jquery

一切似乎没问题,但它似乎没有拿起正确的类。

我的代码是在这里:http://jsfiddle.net/felix001/X7EuJ/23/

<label for="input">IP</label> 
<input type="text" name="input" id="input" size="22" /> 
<input type="submit" value="submit" "whatmask_input" id="submit" align="right" /> 

的JavaScript:

function ipv4addr(x) { 
    var REGEX = /^(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]?)$/; 
    if ($x != $REGEX) { 
     $("#input").addClass(".bad"); 
    } 
    else { 
     $("#input").addClass(".good"); 
    } 
} 

$(document).ready(function() { 
    $("#submit").click(ipv4addr("#input")); 

}); 

谁能告诉我解决此问题的最佳方式?

感谢,

+0

除了小提琴链接之外,请在您的问题中发布代码的相关部分。堆栈溢出的目标是自包含,并且不幸的事情可能发生在[jsfiddle.net](http://jsfiddle.net)。 –

回答

2

加载浏览器的开发工具的控制台(例如,在Chrome),而你有小提琴手页面打开。

第一个错误是:

ReferenceError: Can't find variable: $x 

没有必要以$前缀变量名,$foofoo是两个不同的变量名。如果您有var foo,则foo是变量名称。

而且看代码,这可能不会对你有什么期望:

$("#submit").click(ipv4addr("#input")); 

这将是一样的:

var result = ipv4addr("#input"); 
$("#submit").click(result); 

也就是说,通过调用的返回值ipv4addr(它总是未定义)到点击方法中。您可能希望传递一个函数,以便在每次点击时调用它。

+0

关于变量名称的好消息。但是,如何将提交的变量传递给变量? – felix001

+0

缺少的步骤是从文本框中获取值,以便将其传递到验证函数中。您可以使用[.val()](http://api.jquery.com/val/)来获取该值。查看[.click(handler)](http://api.jquery.com/click/)上的示例,了解如何在click事件中调用函数。 – Douglas

+0

非常感谢您的帮助。 – felix001

1

试试这个功能:

function isDottedIPv4(s) 
{ 
var match = s.match(/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/); 
return match != null && 
     match[1] <= 255 && match[2] <= 255 && 
     match[3] <= 255 && match[4] <= 255; 
} 

isDottedIPv4("127.0.0.001") // true 
isDottedIPv4("448.90210.0.65535") // false 
isDottedIPv4("microsoft.com") // false 
+0

具有零前导字节('0.x.y.z')的A类地址始终无效。根据“无效”的定义,广播地址(任何含有“255”的地址)也可能是。 –