我有一个多行文本框,它应该只接受 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/