c# - 子网掩码的正则表达式?

标签 c# asp.net

我正在使用正则表达式来检查子网掩码。我使用带有屏蔽值的 ajax txtbox,但这不起作用,然后我切换到文本框并为此应用正则表达式。不幸的是,那个也不起作用。

你能帮我出一个子网掩码255.255.255.255的RE吗

或者有什么最好的方法吗?

解决方案:

我使用的是屏蔽文本框,不知道如何输入验证表达式。

最后我找到了一个屏蔽文本框的属性作为验证表达式,我把 RE 放在那里并将属性 validate 更改为 true。

无需显式使用验证器表达式。

谢谢

最佳答案

要使用正则表达式执行此操作,您必须确保整个 IPv4 点分四边形表示一个 32 位数字,仅包含前导数字。确保四边形中的每个数字都只有前导数字是不够的。例如,255.192.255.0 不是有效的子掩码,即使四边形中的每个数字都只有前导数字。基于@xanatos 提供的解决方案,

var leadingOnes = new Regex("255|254|252|248|240|224|192|128|0+");

定义一个正则表达式,它将匹配任何 8 位(十进制)数字,仅包含前导数字。我使用“0+”来允许 .000,它有时用于四边形。显然,如果您想强制使用单个零,请改用“0”。

然后您必须构建一个正则表达式来匹配以下四种模式中的任何一种,我将其表示为伪正则表达式以使其更易于理解:

  • 255.255.255.leadingOnes
  • 255.255.leadingOnes*.0
  • 255.leadingOnes.0.0
  • leadingOnes.0.0.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}))$");

这里是整个字符串,如果我们忽略换行符的话。

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个比较操作完成验证。

关于c# - 子网掩码的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5360768/

相关文章:

c# - 如何加快 Entity Framework LINQ 查询速度?

javascript - Nuget 的安全开关在重定向之前显示空白的 javascript 页面

c# - 使用openxml合并excel中的相邻单元格

javascript - 如何使用javascript从gridview中过滤任何项目

c# - protected 内部方法不允许内部类作为参数

c# - c# asp.net 中的 SQL raiserror 输出

c# - 无法访问应有的保护级别

c# - 无法更改 C# 中的 gridview 单元格,获取数据 GridView 默认错误对话框

c# - 当前上下文中不存在名称 'controlname'

c# - 输入标签的值将 null 传输到数据库中