создание и проверка URL в Java

1

У меня есть вариант использования, где значения, которые принимает моя функция, могут иметь тип:

1. mailto:[email protected]
2. tel:3402904323
3. http(s)://www.google.com
4. www.google.com
5. //www.google.com
6. /content/abc/def/index
7. javascript:;
8. blank
9. #
10. http(s)://www.google.com/index.html#abc
11. http(s)://www.google.com/index.html

Все они должны рассматриваться как действительные, и я должен создать URL-адрес из них, например, для ввода 6 мне нужно будет добавить (.html). Для 7-го мне может понадобиться escapeHtml, и rest может быть возвращен как есть. Есть ли стандартный java API для этого или любая стандартная логика, которую я мог бы сделать для этого. Пожалуйста помоги.

  • 2
    Только эти 11 значений могут быть действительными совпадениями? Вам нужно будет создать несколько шаблонов RegEx.
Теги:
url

2 ответа

0
Лучший ответ

Используйте совпадения строк со следующими регулярными выражениями соответственно.

  1. (?i)mailto:[a-z0-9]{1,}[.a-z0-9]*@[a-z0-9]{1,}[.a-z0-9].[a-z0-9]{2,}

  2. tel:[0-9]{10}

  3. http[s]{0,}://

  4. www\.[a-z0-9\-]{1,}\.com

  5. //www\.[a-z0-9\-]{1,}\.com

  6. /content/([a-z0-9\.\-]{1,}/*)*

  7. nice try

  8. [^\w\W]*

  9. #

  10. http[s]*://[a-z0-9-]{1,}\.[a-z0-9-]{1,}\.com/([a-z0-9-_%\?\=]{1,}/)*[a-zA-Z0-9_-]{1,}\.html#[a-zA-Z_\-\.]{1,}

  11. http[s]*://[a-z0-9-]{1,}\.[a-z0-9-]{1,}\.com/([a-z0-9-_%\?\=]{1,}/)*[a-zA-Z0-9_-]{1,}\.html[a-zA-Z_\-\.]{1,}

Вот пример использования регулярного выражения, в этом случае он вернет логическое значение (оно совпадает или не совпадает)

public static void main(String[] args)
{

    String pattern = "http[s]*://[a-z0-9-]{1,}\\.[a-z0-9-]{1,}\\.com/([a-z0-9-_%\\?\\=]{1,}/)*[a-zA-Z0-9_-]{1,}\\.html#[a-zA-Z_\\-\\.]{1,}";

    String string = "http://docs.oracle.com/javase/8/docs/api/java/lang/String.html#matches-java.lang.String-";

    /*
     * This will print the boolean literal true or false
     */
    System.out.println( string.matches(pattern) );

}
  • 0
    nice try мне нравится
  • 0
    Обратите внимание на флаг (?i) в первом шаблоне. В Java это сделает шаблон нечувствительным к регистру. az означает все строчные буквы, где AZ - заглавные.
0

Просто попробуйте создать java.net.URI со строкой. Если есть синтаксическая ошибка, вы получите URISyntaxException. Все перечисленные выше данные предусматривают, что "http (s)" действительно означает "http" и "https" отдельно. Если вам нужно ограничить схему тем, что показано выше, просто получите схему и посмотрите ее в таблице, и не получите ее, если ее нет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню