regular expression pattern to accept one or multiple ip addresses?

后端 未结 5 1975
太阳男子
太阳男子 2021-01-17 01:20

I am using below regular expression pattern

pattern=\"^(\\d|[1-9]\\d|1\\d\\d|2([0-4]\\d|5[0-5]))\\.(\\d|[1-9]\\d|1\\d\\d|2([0-4]\\d|5[0-5]))\\.(\\d|[1-9]\\d         


        
相关标签:
5条回答
  • 2021-01-17 01:26

    It slowly becomes incomprehensible, but here you are:

    ^(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5])).(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5])).(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5])).(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5]))(,(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5])).(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5])).(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5])).(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5])))*$

    What happens here is:

    let's call your IP regexp IP:

    IP = ((\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5])).(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5])).(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5])).(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5])))

    so we just have to repeat it with comma:

    ^IP(,IP)*$

    0 讨论(0)
  • 2021-01-17 01:28
    <input type="text" name="country_code" pattern="^(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5])).(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5])).(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5])).(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5]))(,(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5])).(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5])).(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5])).(\d|[1-9]\d|1\d\d|2([0-4]\d|5[0-5])))*$">
    

    Use this input field in your HTML file

    0 讨论(0)
  • 2021-01-17 01:29
    ([1-9]\d?\d?(\.\d{1,3}){2}\.\d{1,3},?)+
    

    A little over Reductionist perhaps, but that should handle it. (you will need to trim out the commas from the matches though) Edited to restrict matches to the range of 1...* -> 999...*

    0 讨论(0)
  • 2021-01-17 01:32

    I´d rather not use regex as @biziclop did say.

    You could just split the whole String and pass the ip adress to the InetAddress.html#getByName method. from the documentation of the method:

    If a literal IP address is supplied, only the validity of the address format is checked

    Basicly you could just pass the adress to this method, and the class itself would supply a validation of the adress. If the addres would be invalid you would run into a java.net.UnknownHostException which you would just have to catch. This way you would just have to create a regex that will successfully split all the ip-adresses

    public static void main(String[] args) throws UnknownHostException {
        String adresses = "1.1.2.3.15,192.122.134.1,198.23.45.56";
        for(String s : adresses.split(",|\\sor\\s")) {
            try {
                InetAddress adress = Inet4Address.getByName(s);
            } catch (UnknownHostException e) {
                System.out.println("Invalid format for ip adress " + s);
            }
        }
        adresses = "1.1.2.3 or 192.122.134.1 or 198.23.45.56 ";
        for(String s : adresses.split(",|\\sor\\s")) {
            try {
                InetAddress adress = Inet4Address.getByName(s);
            } catch (UnknownHostException e) {
                System.out.println("Invalid format for ip adress " + s);
            }
        }
    }
    

    output:

    Invalid format for ip adress 1.1.2.3.15
    
    0 讨论(0)
  • 2021-01-17 01:46

    this should work

    ^((2([0-4]\d|5[0-5])|1\d\d|[0]?[1-9]\d|[0]?[0]?\d)(\.(2([0-4]\d|5[0-5])|1\d\d|
    [0]?[1-9]\d|[0]?[0]?\d)){3}([\s,](?!$)|$))*$
    

    it will accept comma separated and space separated ips

    0 讨论(0)
提交回复
热议问题