c# - RegularExpressionValidator 正则表达式用于验证多行文本框中的 IP(每行一个)?

标签 c# asp.net regex textbox multiline

我有一个多行文本框,它应该只接受 IP 地址(每行一个,没有分隔符)。

例如:

10.1.20.1
10.1.20.2

到目前为止,我使用以下正则表达式和 RegularExpressionValidator 来验证文本框,但只有在文本框的第一行输入单个 IP 地址时它才有效。

如果在文本框的第二行输入第二个 IP,则表达式验证失败并显示 RegularExpressionValidator 的错误消息。

我当前的正则表达式验证器如下,

<asp:RegularExpressionValidator runat="server" ErrorMessage="IP addresses (one per line) only please." ControlToValidate="TextBox1" ValidationExpression="\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" />

我在这里不仅仅是要求一个正确的正则表达式(尽可能有帮助),而是更多的解释,让我能够自己创建一个有效的正则表达式。

最佳答案

看起来整个文本应该与正则表达式匹配。您的正则表达式仅将 IP 作为整个单词进行匹配。您需要将 \b 替换为 ^ 并添加与换行符 + IP 匹配的 0+ 量化组。

这是一个例子:

^  # Start of string
 (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)[.](25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)[.](25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
 (?:               # Optional - 0+ - group start
   (?:\r\n|\r|\n)  # linebreaks of various types
   (25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)[.](25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)[.](25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?) # 0+ lines having only IP
 )* # Optional group end
$   # End of string

参见the demo

关于c# - RegularExpressionValidator 正则表达式用于验证多行文本框中的 IP(每行一个)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36934321/

相关文章:

c# - 为什么我有 LINQ to SQL 时还需要存储过程

c# - Entity Framework ..自引用表..获取深度=x的记录?

c# - 在 Excel 工作表中插入数据时 Insert into 语句中出现语法错误

java - 一个可以识别/*...*/注释的正则表达式

java - 根据正则表达式拆分字符串

Javascript:正则表达式用十六进制代码替换一些字符

C# 应用程序(所有用户安装)应为每个用户使用 %appdata%(甚至 runAs Admin 和/或在 RDP session 中)

c# - Unity C# 可滚动 GUI.BOX 不适用于 android

c# - 在控制台中检测 Ctrl + S

javascript - asp.net 2.0 站点和 &lt;script/> 标记的位置导致问题/冲突