Regular Expression to match IP address + wildcard

后端 未结 5 875
旧时难觅i
旧时难觅i 2021-01-02 21:57

I\'m trying to use a RegularexpressionValidator to match an IP address (with possible wildcards) for an IP filtering system.

I\'m using the following Regex:

相关标签:
5条回答
  • 2021-01-02 22:10

    This: \\.|\\*\\. looks like the dodgy bit. Do this instead:

    @"^(([0-9]{1,3}|\*)\.){3}([0-9]{1,3}|\*)$"
    

    And to only accept 0-255 (thanks, apoorv020):

    ^((([0-9]{1,2})|(1[0-9]{2,2})|(2[0-4][0-9])|(25[0-5])|\*)\.){3}(([0-9]{1,2})|(1[0-9]{2,2})|(2[0-4][0-9])|(25[0-5])|\*)$
    
    0 讨论(0)
  • 2021-01-02 22:10

    [0-9]{1,3} would allow IP addresses of the form 999.999.999.999 . Your IP address range should allow only 0-255.
    Replace all occurences of [0-9]{1,3} with ([0-9]{1,2})|(1[0-9]{2,2})|(2[0-4][0-9])|(25[0-5])
    This does seem very complicated to me, and probably there are better ways of doing this, but it seems correct at first glance.

    0 讨论(0)
  • 2021-01-02 22:23

    asp:RegularExpressionValidator does not require you to double-escape backslashes. You should try:

    ([0-9]{1,3}\.|\*\.){3}([0-9]{1,3}|\*){1}

    0 讨论(0)
  • 2021-01-02 22:31

    My answer is general for .NET, not RegularExpressionValidator-specific.

    Regex string for IP matching (use ExplicitCapture to avoid useless capturing and keep RE concise):

    "\\b0*(2(5[0-5]|[0-4]\\d)|1?\\d{1,2})(\\.0*(2(5[0-5]|[0-4]\\d)|1?\\d{1,2})){3}\\b"
    

    Depending on particular use case you may want to add appropriate anchors, i.e. \A or ^ at the beginning and \Z or $ at the end. Then you can remove word-boundaries requirement: \b.

    (Remember about doubling \ inside the string)

    0 讨论(0)
  • 2021-01-02 22:35

    How about putting start and end string characters on the expression

    ^([0-9]{1,3}\\.|\\*\\.){3}([0-9]{1,3}|\\*){1}$
    
    0 讨论(0)
提交回复
热议问题