我正在使用正则表达式来检查子网掩码.我使用带有屏蔽值的ajax txtbox,但这不起作用,然后我切换到文本框并为其应用正则表达式.不幸的是,一个人也没有工作.
你能帮助我为子网屏蔽255.255.255.255提供RE吗?
或者最好的方法呢?
方案:
我使用蒙面文本框,不知道如何放置验证表达式.
最后,我发现了一个蒙版文本框的属性作为验证表达式,然后我把RE和属性validate更改为true.
无需显式使用验证器表达式.
谢谢
Joe*_*Lee 11
要使用正则表达式执行此操作,必须确保整个IPv4点分四边形表示仅包含前导数字的32位数字.仅仅确保四元组中的每个数字只有前导数字是不够的.例如,255.192.255.0不是有效的子掩码,即使四元组中的每个数字只有前导数字.基于@xanatos提供的解决方案,
var leadingOnes = new Regex("255|254|252|248|240|224|192|128|0+");
定义一个正则表达式,它将匹配任何8位(十进制)数字与仅前导数字.我使用"0+"来允许.000,有时用于四边形.显然,如果你想强迫零,请改用"0".
然后,您必须构建一个正则表达式,该表达式匹配以下四种模式中的任何一种,我将其表示为伪正则表达式,以便于理解:
您可以将其写为单个字符串,也可以通过连接来构建它.这是建立起来的:
var leadingOnes = "(255|254|252|248|240|224|192|128|0+);"
var allOnes = @"(255\.)";
var re = new Regex("^((" + allOnes + "{3}" + leadingOnes + ")|" +
"(" + allOnes + "{2}" + leadingOnes + @"\.0+)|" +
"(" + allOnes + leadingOnes + @"(\.0+){2})|" +
"(" + leadingOnes + @"(\.0+){3}))$");Run Code Online (Sandbox Code Playgroud)
如果我们忽略换行符,这就是整个字符串.
var re = new Regex(@"^(((255\.){3}(255|254|252|248|240|224|192|128|0+))|((255\.){2}(255|254|252|248|240|224|192|128|0+)\.0)|((255\.)(255|254|252|248|240|224|192|128|0+)(\.0+){2})|((255|254|252|248|240|224|192|128|0+)(\.0+){3}))$");
按照@ Keith的建议,你可以从一个简单的正则表达开始,比如
Regex("([0-9]{1,3}\.){3}[0-9]{1,3}"获得由点分隔的四个3位数字,然后编写一个函数,提取并评估这四个部分为32位整数,然后检查以确保它只有前导数.有几种方法可以做到这一点,但所有这些方法都需要最多31个比较操作才能完成验证.
如果要接受任何IP地址作为子网掩码:
var num = @"(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})";
var rx = new Regex("^" + num + @"\." + num + @"\." + num + @"\." + num + "$");
Run Code Online (Sandbox Code Playgroud)
我认为更容易在单独的变量中拆分单个数字组的"重复"匹配.
作为读者的练习,我将给出表达式的另一种变体.这个将捕获同一组中的所有数字,但不同的捕获:
var rx = new Regex("^(?:" + num + @"(?:\.(?!$)|$)){4}$");
Run Code Online (Sandbox Code Playgroud)
但是这是错的,你应该使用它
var num = @"(255|254|252|248|240|224|192|128|0+)";
var rx = new Regex("^" + num + @"\." + num + @"\." +num + @"\." +num + "$");
Run Code Online (Sandbox Code Playgroud)
要么
var rx = new Regex("^(?:" + num + @"(?:\.(?!$)|$)){4}$");
Run Code Online (Sandbox Code Playgroud)
http://www.freesoft.org/CIE/Course/Subnet/6.htm
| 归档时间: |
|
| 查看次数: |
12846 次 |
| 最近记录: |