【问题标题】:RegularExpressionValidator Regex to validate IPs (one per line) in a multiline textbox?正则表达式验证器正则表达式在多行文本框中验证 IP(每行一个)?
【发布时间】:2016-08-24 09:04:05
【问题描述】:

我有一个只接受 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]?)" />

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

【问题讨论】:

    标签: c# asp.net regex textbox multiline


    【解决方案1】:

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

    【讨论】:

    • 感谢您的解释+回答。此外,演示链接的站点应该有助于解决我遇到的任何其他正则表达式问题! :D
    • 是的,就正则表达式测试站点而言,请注意 regex101.com 将模式视为 PCRE/JavaScript 或 Python 正则表达式,因此,如果您计划使用应该支持的服务器端复杂模式.NET 语法,请使用 regexstorm.net 或 regexhero.net。请注意,行尾是不同的:在 regex101.com 换行符是 \n 而在 .NET 正则表达式测试站点,它是 \r\n (因此,如果您需要测试多行字符串并测试单独的行,@987654327 @ 应替换为 \r?$)。
    猜你喜欢
    • 2011-01-20
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多