我读过有关IP掩码的问题但尚未找到答案 我正在尝试使用正则表达式来验证IP,从而在wpf中编写文本框。这是我的xaml代码 这段代码正在运行
null
例如,我可以写192或255或29 之后我想添加一个点字符。这让我的代码崩溃了。所以我希望我能写 192.或255.或29。 我认为括号中的问题,但无法理解如何解决它。我的解决方案不正确:
<TextBox wpfApplication2:Masking.Mask="^([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"/>
和
<TextBox wpfApplication2:Masking.Mask="^([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])[.]$"/>
我确定这个错误非常愚蠢,但无法找到它
更新 感谢@stribizhev,他给出了IP地址的解释和答案。 我的问题是:我应该在[。]之后使用{0,1}。所以我的问题的正确答案(如何为数字192或255或29创建掩码)是
<TextBox wpfApplication2:Masking.Mask="^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])[.])$"/>
答案 0 :(得分:1)
如果您想接受任何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 + "$");
我认为更容易拆分&#34;重复&#34;匹配单个变量中的单个数字组。
作为读者的练习,我将给出表达的另一种变体。这个将捕获同一组中的所有数字,但不同的捕获:
var rx = new Regex("^(?:" + num + @"(?:\.(?!$)|$)){4}$");
但是错了,你应该使用这个
var num = @"(255|254|252|248|240|224|192|128|0+)";
var rx = new Regex("^" + num + @"\." + num + @"\." +num + @"\." +num + "$");
或
var rx = new Regex("^(?:" + num + @"(?:\.(?!$)|$)){4}$");
答案 1 :(得分:1)
以下是可用于实时验证的正则表达式(不适用于最终):
^(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(?:\.(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])?){0,3}$
请参阅demo
为实时验证编写正则表达式时的要点是使部件可选。可以使用*
,?
和{0,x}
量词来完成。这是一个正则表达式的细分:
^
- 字符串开头(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])
- 这是第一个号码,这是强制性的,但如果您打算让值为空,请在末尾添加?
(?:\.(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])?){0,3}
- 一系列0到3次出现....
\.
- 一个文字点(在逐字字符串文字中,@"..."
)(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])?
- 允许的数字序列,1或0出现(最后有?
)$
- 字符串结尾对于最终验证,请使用
^(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(?:\.(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}$
请参阅another demo
此正则表达式检查整个最终IP字符串。