Допустимые символы URL. Java для проверки

строка как: 'www.test.com' хорош. строка как: 'www.888.com' хорош. строка как: 'stackoverflow.com' хорош. строка как: 'GOoGle.Com' хорош.

почему? потому что это - допустимые URL. не обязательно имеет значение, если они были зарегистрированы или нет.

теперь плохие строки:

'goog*d\x' 'manydots...com'

почему, потому что Вы не можете зарегистрировать те URL.

если у меня есть строка в Java, который, как предполагается, является хорошим URL, что лучший способ состоит в том, чтобы проверить его?

большое спасибо

9
задан Chez 8 April 2010 в 16:42
поделиться

5 ответов

Этими примерами являются имена хостов . Сами по себе они не являются действительными URL-адресами.

Имена хостов состоят из . -разделенные «ярлыки». Каждая метка должна содержать до 63 символов букв, цифр и дефисов, но дефис не должен быть первым или последним символом. Необязательно ставить после всего имени хоста еще одну точку.

Вы можете сопоставить это с шаблоном вроде (при условии, что регистр не учитывается):

([a-z0-9]|[a-z0-9][a-z0-9\-]{0,61}[a-z0-9])(\.[a-z0-9]|[a-z0-9][a-z0-9\-]{0,61}[a-z0-9])*\.?

Однако это также соответствует строкам вроде 1.2.3.4 , которые, хотя технически могут быть именами хоста / домена, на самом деле будут действуют как прямые IP-адреса. Вы можете разрешить это. Если вы это сделаете, вы также можете разрешить адреса IPv6, которые разделены двоеточиями в шестнадцатеричном формате; когда они встроены в URL-адрес, они также заключаются в квадратные скобки.

И, конечно же, IDNA. В настоящее время 例 え. テ ス ト является допустимым доменным именем IDNA, соответствующим xn - r8jz45g.xn - zckzah . Если вы хотите разрешить это, вам понадобится поддержка Unicode.

Резюме: это немного сложнее, чем вы думаете. И это просто имена хостов. «Проверка» всего URL - это еще больше работы. Простое регулярное выражение его не взломает. Используйте уже существующую библиотеку.

3
ответ дан 4 December 2019 в 22:28
поделиться

Я также считаю, что вы можете использовать URL в java.net

URL url = new URL("www.google.com");

В API указано общедоступный URL (спецификация строки) выдает MalformedURLException Параметры: spec - строка для синтаксического анализа как URL. Выдает: MalformedURLException - если строка указывает неизвестный протокол.

Таким образом, создается исключение, если URL недействителен.

-1
ответ дан 4 December 2019 в 22:28
поделиться

Вы можете выполнить такую ​​«проверку URL» с помощью регулярных выражений .

И здесь - это место, где вы можете получить несколько хороших регулярных выражений URL (так что вам не нужно писать свое собственное).

-2
ответ дан 4 December 2019 в 22:28
поделиться

используйте UrlValidator из библиотеки Apache Commons . Двоичный пакет: http://www.mirrorservice.org/sites/ftp.apache.org/commons/validator/binaries/commons-validator-1.3.1.zip (zip содержит файлы .jar)

Пример использования (Создайте UrlValidator с допустимыми схемами «http» и «https»):

String[] schemes = {"http","https"}.
UrlValidator urlValidator = new UrlValidator(schemes);
if (urlValidator.isValid("ftp://foo.bar.com/")) {
   System.out.println("url is valid");
} else {
   System.out.println("url is invalid");
}

выводит «url is invalid»

Если вместо этого используется конструктор по умолчанию.

UrlValidator urlValidator = new UrlValidator();
if (urlValidator.isValid("ftp://foo.bar.com/")) {
   System.out.println("url is valid");
} else {
   System.out.println("url is invalid");
}

выводит "url is valid"

9
ответ дан 4 December 2019 в 22:28
поделиться

Я думаю, что new URL(yourString) сделает свое дело: он должен вызвать MalformedURLException, если url не совместим (на самом деле в java API он говорит Если строка указывает неизвестный протокол, но вы все равно можете попробовать):

try
{
   new URL(string);
} catch (MalformedURLException e) {
  //do whatever
}
-1
ответ дан 4 December 2019 в 22:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: