动态AngularJS验证,匹配IP地址,但最后一个八位字节在特定范围内

时间:2017-03-27 18:14:29

标签: javascript angularjs regex

在我们的应用程序中,DHCP Scope包含数据。我们先说5.5.5.5。用户可以在应用程序的此区域输入IP地址,但输入的IP必须与DHCP作用域相同,但最后一个八位字节可以不同,且必须介于2到254之间。

因此,对于上面的DHCP Scope,用户可以输入介于5.5.5.2和5.5.5.254之间的IP。

我创建了一个JSFiddle,除了我需要的ng-pattern之外,还有其他所有东西,这是我需要帮助的:https://jsfiddle.net/spaceninja/6yz09y61/

我认为我需要的是一个RegEx模式,它采用原始IP地址并将其用作模式,除了最后一个八位字节必须在2-254范围内,如:

$scope.regex = /[5][.][5][.][5][.][2-254]/g;

除了[5]之外,数据中的八位字节是原始的5.5.5.5,但它可以是来自数据的任何有效IP。 (我知道[2-254]在上面的例子中不正确,但我还在学习RegEx)。所以它看起来可能是这样的?

var originalIP = "192.168.2.3";
var parts = ip.split('.');
var octet1 = parts[0];
var octet2 = parts[1];
var octet3 = parts[2];
var octet4 = parts[3];

然后,如果你能以某种方式在RegEx中使用变量,那么模式可能是:

$scope.regex = /[octet1][.][octet2][.][octet3][.][2-254]/g;

我不认为你可以使用这样的变量,但我希望它能解释我需要的东西。

2 个答案:

答案 0 :(得分:1)

您可以使用原始IP中的部分创建新的正则表达式。

var ip = ('5.5.5.5').split('.');
var regex = RegExp(ip[0] + '\.' + ip[1] + '\.' + ip[2] + '\.[2-254]')

然后你可以将该正则表达式存储在范围内以使用ng-pattern!

答案 1 :(得分:1)

这是您的解决方案

如果您需要任何更改,请告诉我

var myapp = angular.module('myApp', [])
  .controller('fiddleCtrl', ['$scope', function($scope) {

    $scope.dhcp = "192.168.1.1"; // This will come in from the data


    $scope.regex = "^(" +$scope.dhcp.split('.').slice(0,3).join('.') + "." +")([2-9]|([1-9][0-9])|([1][0-9][0-9])|([2][0-5][0-4]))$";


  }]);

https://jsfiddle.net/6yz09y61/5/