Проверьте URL/IP с портом с помощью регулярного выраженияJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Проверьте URL/IP с портом с помощью регулярного выражения

Сообщение Anonymous »


Мое приложение Java 11/Android должно проверить, может ли введенный пользователем URL-адрес/IP-адрес теоретически быть действительным (с использованием myURL.trim().matches(regex)).

Что должно быть действительным (включая варианты):
[*]stackoverflow.com [*]http://stackoverflow.com [*]http://amazon.co.uk [*]https://www.amazon.co.uk [*]ftp://10.1.1.9 [*]10.1.1.9:1234 [*]http://10.1.1.9:1234/bla
Что не должно быть допустимо:
[*]http://bla [*]бла [*]"---" (без "", пришлось добавить из-за форматирования) [*]10.9 [*]10.1.1. [*]10.1..1.9
Меня не волнует, вводит ли пользователь, например. "999.999.999.999", я только хочу знать, является ли синтаксис теоретически правильным, как и в данном случае.

До сих пор я использовал это регулярное выражение:

String regex1 = "((http|https|ftp)://)?((\\w)*|([0-9]*)|([-|_])*)+ ([\\.|/]((\\w)*|([0-9]*)|([-|_])*))+"; ... но теперь я тоже хочу проверить порт, а ^ это не поддерживает. Эта другая версия поддерживает порты:

String regex2 = "((http|https|ftp)://)?(([^/:.[:space:]]+(.[^/:.[:space:]] +)*)|([0-9](.[0-9]{3})))(:[0-9]+)?((/[^?#[:space:]]+)( [^#[:пробел:]]+)?(#.+)?)?"; ... но он возвращает true для таких строк, как "http://bla" или "---".

Я также протестировал эту версию от Microsoft:

String regex3 = "^(ht|f)tp(s?)\\:\\/\\/[0-9a-zA-Z]([-.\\w]*[0 -9a-zA-Z])*(:(0-9)*)*(\\/?)([a-zA-Z0-9\\-\\.\\?\\,\\'\ \/\\\\\\+&%\\$#_]*)?$"; ... но это не работает для некоторых из приведенных выше примеров ("http://bla" и "http://10.1.1.9:1234/bla" действительны, "10.1.1.9" и " stackoverflow.com" нет), и я не уверен, как заставить эту длинную версию PHP работать с Java, поскольку она жалуется на "#" и ")".

Я знаю, что в stackoverflow уже есть много кода регулярных выражений для проверки URL-адресов, и я уже протестировал кучу других версий из мега-потока (и другие вопросы), но те, которые я мог заставить Android Studio Accept не сработал, и мои «знания» регулярных выражений даже отдаленно не достаточно велики, чтобы модифицировать чужой код, не говоря уже о написании своего собственного.

Как мне это сделать?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»