2014-08-28 85 views
4

如何在AngularJS的文本字段中验证IP?目前我正在使用此代码,但它并不适用于所有情况。任何想法 ?如何在文本字段中验证IP AngularJS

ng-pattern='/^((([01]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))$/

+0

在哪些情况下是失败的? – 2014-08-28 12:08:09

+0

可能会帮助你http://www.w3resource.com/javascript/form/ip-address-validation.php – Satpal 2014-08-28 12:08:50

+0

@musically_ut它接受0.0.0.0和255.255.255.255。我认为它不应该。 – Harikrishnan 2014-08-28 12:09:58

回答

9

用途:

/\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/ 

匹配0.0.0.0通过255.255.255.255

如果你想删除0.0.0.0255.255.255.255我建议你添加额外的if声明。否则正则表达式会太复杂。

实施例与观察者:

$scope.ip = '1.2.3.4'; 

    $scope.$watch(function() { 
     return $scope.ip; 
    }, 

    function (newVal, oldVal) {    
     if (
      newVal != '0.0.0.0' && newVal != '255.255.255.255' && 
      newVal.match(/\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/)) 
     { 
      // Match attempt succeeded 
     } else { 
      // Match attempt failed 
     } 
    }) 

演示Fiddle

[编辑]

最好的办法是创建指令,是这样的:<ip-input>

这个例子可能有帮助如何为自定义输入创建的指令:format-input-value-in-angularjs

+0

而不是在你的控制器中添加一个手表,你可以把这个功能放在一个角度函数中,并用它作为ng-change指令中的一个表达式。 – Ronald91 2014-08-28 13:20:02

+0

@ Ronald91那么,肯定指令的方式是比较合适的,比如''。但是,SO请求正则表达式验证。我只为演示添加了观察者。顺便说一句,这是我用'$ parsers'写过的例子:http://stackoverflow.com/questions/19890364/format-input-value-in-angularjs/19890485#19890485 – 2014-08-28 13:27:21