【发布时间】:2015-09-01 10:22:50
【问题描述】:
我阅读了有关 IP 掩码的问题,但没有找到答案 我正在尝试使用正则表达式在 wpf 中编写一个文本框来验证 IP。这是我的 xaml 代码 此代码正在运行
<TextBox wpfApplication2:Masking.Mask="^([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"/>
例如,我可以写 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掩码,想一步一步定义。我发现这个掩码适用于 IP ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]| 25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0- 9]|25[0-5])$ 但它不起作用。这就是为什么我决定逐步尝试编写它的原因
-
你考虑过使用 System.Net.IPAddress.Parse() 吗?
-
您想说您正在执行实时验证。正确的?然后,知道您需要使用一个正则表达式实时验证字符串,并使用另一个正则表达式执行最终验证。你不能同时使用一个。试试
^(?:[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}$。