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