- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用正则表达式来检查子网掩码。我使用带有屏蔽值的 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”。
然后您必须构建一个正则表达式来匹配以下四种模式中的任何一种,我将其表示为伪正则表达式以使其更易于理解:
您可以将其作为单个字符串写出,也可以通过连接将其构建起来。这是构建它:
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/
我是一名优秀的程序员,十分优秀!