Проверьте URL/IP с портом с помощью регулярного выражения ⇐ JAVA
-
Anonymous
Проверьте URL/IP с портом с помощью регулярного выражения
Мое приложение 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 не сработал, и мои «знания» регулярных выражений даже отдаленно не достаточно велики, чтобы модифицировать чужой код, не говоря уже о написании своего собственного.
Как мне это сделать?
Мое приложение 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 не сработал, и мои «знания» регулярных выражений даже отдаленно не достаточно велики, чтобы модифицировать чужой код, не говоря уже о написании своего собственного.
Как мне это сделать?
Мобильная версия