Как я могу проверить, является ли строка IPv4 / IPv6 или именем домена? (Java) - PullRequest
1 голос
/ 03 апреля 2020

Как проверить, соответствует ли строка IPv4, IPv6-адресу или доменному имени, например www.google.com?

Я нашел это для IPv4: Проверка строки IPv4 в Java И такая же система работает для IPv6, но как я могу проверить доменные имена?

РЕДАКТИРОВАТЬ 1: Чтобы уточнить: я хочу проверить, является ли строка действительным адресом сервера. Действительный просто означает, что ФОРМАТ правильный. Соединение будет проверено в другой точке программы.

РЕДАКТИРОВАТЬ 2: Я создам свой собственный метод проверки и затем опубликую его здесь

Ответы [ 3 ]

1 голос
/ 03 апреля 2020

Apache имеет подтверждение доменного имени :

 public void testValidDomains() {
        assertTrue("apache.org should validate", validator.isValid("apache.org"));
        assertTrue("www.google.com should validate", validator.isValid("www.google.com"));

        assertTrue("test-domain.com should validate", validator.isValid("test-domain.com"));
        assertTrue("test---domain.com should validate", validator.isValid("test---domain.com"));
        assertTrue("test-d-o-m-ain.com should validate", validator.isValid("test-d-o-m-ain.com"));
        assertTrue("two-letter domain label should validate", validator.isValid("as.uk"));

        assertTrue("case-insensitive ApAchE.Org should validate", validator.isValid("ApAchE.Org"));

        assertTrue("single-character domain label should validate", validator.isValid("z.com"));

        assertTrue("i.have.an-example.domain.name should validate", validator.isValid("i.have.an-example.domain.name"));
    }

    public void testInvalidDomains() {
        assertFalse("bare TLD .org shouldn't validate", validator.isValid(".org"));
        assertFalse("domain name with spaces shouldn't validate", validator.isValid(" apache.org "));
        assertFalse("domain name containing spaces shouldn't validate", validator.isValid("apa che.org"));
        assertFalse("domain name starting with dash shouldn't validate", validator.isValid("-testdomain.name"));
        assertFalse("domain name ending with dash shouldn't validate", validator.isValid("testdomain-.name"));
        assertFalse("domain name starting with multiple dashes shouldn't validate", validator.isValid("---c.com"));
        assertFalse("domain name ending with multiple dashes shouldn't validate", validator.isValid("c--.com"));
        assertFalse("domain name with invalid TLD shouldn't validate", validator.isValid("apache.rog"));

        assertFalse("URL shouldn't validate", validator.isValid("http://www.apache.org"));
        assertFalse("Empty string shouldn't validate as domain name", validator.isValid(" "));
        assertFalse("Null shouldn't validate as domain name", validator.isValid(null));
    }

Надеюсь, что поможет.

1 голос
/ 03 апреля 2020

Вы делаете это с помощью регулярных выражений. Вы можете создать шаблон, в котором первые 3 символа - это «w», затем точка, затем, например, 20 alphanumeri c символов и т. Д. После этого вы проверяете, соответствует ли данная строка определенному шаблону.

В предоставленной вами ссылке уже используются регулярные выражения.

Оформление заказа это руководство для регулярных выражений в java.

0 голосов
/ 03 апреля 2020

Не беспокойся. Слишком много угловых случаев, и в конце концов все еще велика вероятность того, что проверка соединения не пройдет. Вы также получите множество ложноотрицательных проверок.

Просто переместите проверку соединения ближе к месту, куда этот домен / ip попадает в систему.

...