gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 19:51:20 24 4
gpt4 key购买 nike

我正在使用正则表达式来检查子网掩码。我使用带有屏蔽值的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com