JAVA中的网站/ URL验证正则表达式

Hao*_*ing 4 java regex validation url

我需要一个正则表达式字符串来匹配以"http://","https://","www.","google.com"开头的网址

我尝试使用的代码是:

//Pattern to check if this is a valid URL address
    Pattern p = Pattern.compile("(http://|https://)(www.)?([a-zA-Z0-9]+).[a-zA-Z0-9]*.[a-z]{3}.?([a-z]+)?");
    Matcher m;
    m=p.matcher(urlAddress);
Run Code Online (Sandbox Code Playgroud)

但此代码只能匹配" http://www.google.com " 等网址

我知道这是一个重复的问题,但我已经尝试了所有提供的正则表达式,它不符合我的要求.威尔有人请帮帮我吗?谢谢.

Avi*_*Raj 17

你需要(http://|https://)在你的正则表达式作为可选的一部分.

^(http:\/\/|https:\/\/)?(www.)?([a-zA-Z0-9]+).[a-zA-Z0-9]*.[a-z]{3}.?([a-z]+)?$
Run Code Online (Sandbox Code Playgroud)

DEMO

  • 正确的是`^(http:\ /\/ | https:\ /\/)?(www.)?([a-zA-Z0-9] +).[a-zA-Z0-9]*.[ AZ] {3} \.([AZ] +)?$` (4认同)
  • 此正则表达式不接受斜杠,例如。`https:// www.google.com / 123`。它还不接受多个键值对,例如:https://www.google.com?key1 = value1 && key2 = value2`。 (2认同)

Raj*_*ani 9

您可以使用Apache commons库(org.apache.commons.validator.UrlValidator)来验证URL:

String[] schemes = {"http","https"}.
UrlValidator urlValidator = new UrlValidator(schemes);
Run Code Online (Sandbox Code Playgroud)

并使用: -

 urlValidator.isValid(your url)
Run Code Online (Sandbox Code Playgroud)

然后就不需要正则表达式了.

链接: - https://commons.apache.org/proper/commons-validator/apidocs/org/apache/commons/validator/routines/UrlValidator.html


Der*_*cht 5

如果您使用Java,建议您使用此RegEx(我自己写的):

^(https?:\/\/)?(www\.)?([\w]+\.)+[??\w]{2,63}\/?$
"^(https?:\\/\\/)?(www\.)?([\\w]+\\.)+[??\\w]{2,63}\\/?$" // as Java-String
Run Code Online (Sandbox Code Playgroud)

解释:

  • ^ =行首
  • (https?://)?=可能出现“ http://”或“ https://”。
  • (万维网。)?=“ www。” 五月
  • ([\ w] +。)+ =一个单词([a-zA-Z0-9])必须出现一次或多次。(如果您在URL中需要特殊字符(例如ü,ä,ö或其他字符),请在此处扩展-如果使用特殊字符,请记住使用IDN.toASCII(url)。如果您需要了解通常哪些字符是合法的:https:/ /kb.ucla.edu/articles/what-c​​haracters-can-go-into-a-valid-http-url
  • [?? \ w] {2,63} =一个包含2到63个字符的单词([a-zA-Z0-9])必须恰好出现一次。(TLD(顶级域名(例如.com)不能少于2个字符或不能超过63个字符)
  • /?=可能出现“ /”字符。(某些人或服务器在末尾加一个/等等)
  • $ =行尾

--

如果用特殊字符扩展它,则可能看起来像这样:

^(https?:\/\/)?(www\.)?([\w\Q$-_+!*'(),%\E]+\.)+[??\w]{2,63}\/?$
"^(https?:\\/\\/)?(www\.)?([\\w\\Q$-_+!*'(),%\\E]+\\.)+[??\\w]{2,63}\\/?$" // as Java-String
Run Code Online (Sandbox Code Playgroud)

Avinash Raj的答案并不完全正确。

^(http:\/\/|https:\/\/)?(www.)?([a-zA-Z0-9]+).[a-zA-Z0-9]*.[a-z]{3}.?([a-z]+)?$
Run Code Online (Sandbox Code Playgroud)

点不转义,这意味着它可以与任何字符匹配。我的版本也更简单,我从未听说过像“ test..com”这样的域名(实际上匹配...)

演示:https : //regex101.com/r/vM7wT6/279


编辑:正如我看到有人需要一个正则表达式,它也匹配服务器目录,我这样写:

^(https?:\/\/)?([\w\Q$-_+!*'(),%\E]+\.)+(\w{2,63})(:\d{1,4})?([\w\Q/$-_+!*'(),%\E]+\.?[\w])*\/?$
Run Code Online (Sandbox Code Playgroud)

虽然这可能不是最好的方法,但是由于我没有花太多时间在它上面,所以它可能会对某人有所帮助。您可以在这里查看其工作方式:https : //regex101.com/r/vM7wT6/700它还可以匹配“ hello.to/test/whatever.cgi”之类的网址。