У меня есть вариант использования, где значения, которые принимает моя функция, могут иметь тип:
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 для этого или любая стандартная логика, которую я мог бы сделать для этого. Пожалуйста помоги.
Используйте совпадения строк со следующими регулярными выражениями соответственно.
(?i)mailto:[a-z0-9]{1,}[.a-z0-9]*@[a-z0-9]{1,}[.a-z0-9].[a-z0-9]{2,}
tel:[0-9]{10}
http[s]{0,}://
www\.[a-z0-9\-]{1,}\.com
//www\.[a-z0-9\-]{1,}\.com
/content/([a-z0-9\.\-]{1,}/*)*
nice try
[^\w\W]*
#
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,}
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) );
}
nice try
мне нравится
(?i)
в первом шаблоне. В Java это сделает шаблон нечувствительным к регистру. az
означает все строчные буквы, где AZ
- заглавные.
Просто попробуйте создать java.net.URI
со строкой. Если есть синтаксическая ошибка, вы получите URISyntaxException
. Все перечисленные выше данные предусматривают, что "http (s)" действительно означает "http" и "https" отдельно. Если вам нужно ограничить схему тем, что показано выше, просто получите схему и посмотрите ее в таблице, и не получите ее, если ее нет.