строка как: 'www.test.com' хорош. строка как: 'www.888.com' хорош. строка как: 'stackoverflow.com' хорош. строка как: 'GOoGle.Com' хорош.
почему? потому что это - допустимые URL. не обязательно имеет значение, если они были зарегистрированы или нет.
теперь плохие строки:
'goog*d\x' 'manydots...com'
почему, потому что Вы не можете зарегистрировать те URL.
если у меня есть строка в Java, который, как предполагается, является хорошим URL, что лучший способ состоит в том, чтобы проверить его?
большое спасибо
Этими примерами являются имена хостов . Сами по себе они не являются действительными 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 - это еще больше работы. Простое регулярное выражение его не взломает. Используйте уже существующую библиотеку.
Я также считаю, что вы можете использовать URL в java.net
URL url = new URL("www.google.com");
В API указано
общедоступный URL (спецификация строки) выдает MalformedURLException
Параметры:
spec - строка для синтаксического анализа как URL.
Выдает:
MalformedURLException - если строка указывает неизвестный протокол.
Таким образом, создается исключение, если URL недействителен.
Вы можете выполнить такую «проверку URL» с помощью регулярных выражений .
И здесь - это место, где вы можете получить несколько хороших регулярных выражений 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 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"
Я думаю, что new URL(yourString)
сделает свое дело: он должен вызвать MalformedURLException
, если url не совместим (на самом деле в java API он говорит Если строка указывает неизвестный протокол, но вы все равно можете попробовать):
try
{
new URL(string);
} catch (MalformedURLException e) {
//do whatever
}