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


Строка типа: 'www.test.com-это хорошо. строка вроде: 'www.888.com-это хорошо. строка вроде: 'stackoverflow.com-это хорошо. строка вроде: 'GOoGle.Com-это хорошо.

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

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

'goog*dx' 'manydots...com'

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

Если у меня есть строка в java, которая должна быть хорошим url-адресом что лучший способ проверить это ?

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

5 9
url

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, соответствующим xn--r8jz45g.xn--zckzah. Если вы хотите разрешить их, вам понадобится поддержка юникода.

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

Используйте 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 недопустим"

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

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 допустим"

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

try
{
   new URL(string);
} catch (MalformedURLException e) {
  //do whatever
}

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

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

Api говорит: public URL(String spec) throws MalformedURLException Parameters: spec - the String to parse as a URL. Throws: MalformedURLException - If the string specifies an unknown protocol.

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

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

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