繁体   English   中英

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

[英]Dynamic AngularJS validation that matches an IP address, but where the last octet is within a specific range

在我们的应用程序中,数据附带了DHCP作用域。 假设是5.5.5.5。 用户可以在应用程序的此区域中输入IP地址,但是他们输入的IP地址必须与DHCP作用域相同,但最后一个八位位组可以不同,并且必须在2到254之间。

因此,对于上述DHCP作用域,用户可以输入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;

我认为您不能使用这样的变量,但我希望它可以解释我的需求。

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

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

然后您可以将该正则表达式存储在示波器上以使用ng-pattern!

这是您的解决方案

让我知道您是否需要任何更改

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/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM