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

RegularExpressionValidator Regex to validate IPs (one per line) in a multiline textbox?

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

例如:

10.1.20.1
10.1.20.2

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

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

我当前的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替换为^,并添加一个0+量化组匹配一个换行符+IP。

这是一个例子:

^  # 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