我有一个多行文本框,仅应接受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]?)" />


我不仅在这里要求使用正确的Regex(那样会很有帮助),还请提供更多的解释,以便我自己创建一个可用的Regex。

最佳答案

似乎整个文本应与正则表达式匹配。您的正则表达式只匹配整个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

10-07 19:19
查看更多