在我们的应用程序中,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;
我不认为你可以使用这样的变量,但我希望它能解释我需要的东西。
答案 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]))$";
}]);