Допустимые символы URL. java для проверки
Строка типа: 'www.test.com-это хорошо. строка вроде: 'www.888.com-это хорошо. строка вроде: 'stackoverflow.com-это хорошо. строка вроде: 'GOoGle.Com-это хорошо.
Почему ? потому что это допустимые URL-адреса. это не обязательно имеет значение, были ли они зарегистрированы или нет.
Теперь плохие строки:
'goog*dx' 'manydots...com'
Почему, потому что вы не можете зарегистрировать эти URL-адреса.
Если у меня есть строка в java, которая должна быть хорошим 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 (так что вам не нужно писать свои собственные).