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

时间:2014-07-24 02:16:40

标签: java regex validation url

我需要一个正则表达式字符串来匹配以&#34开头的网址; 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);

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

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

6 个答案:

答案 0 :(得分:15)

您需要将(http://|https://)作为可选项加入正则表达式。

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

DEMO

答案 1 :(得分:8)

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

String[] schemes = {"http","https"}.
UrlValidator urlValidator = new UrlValidator(schemes);

并使用: -

 urlValidator.isValid(your url)

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

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

答案 2 :(得分:5)

如果你使用Java,我建议使用这个RegEx(我自己写的):

^(https?:\/\/)?(www\.)?([\w]+\.)+[‌​\w]{2,63}\/?$
"^(https?:\\/\\/)?(www\.)?([\\w]+\\.)+[‌​\\w]{2,63}\\/?$" // as Java-String

解释:

  • ^ = line start
  • (HTTPS://)? =“http://”或“https://”可能会发生。
  • (WWW)。? =“www。”可能是orrur。
  • ([\ w] +。)+ =一个字([a-zA-Z0-9])必须出现一次或多次。 (如果您需要特殊字符,如URL中的ü,ä,ö或其他字符,请在此处延伸 - 如果您使用特殊字符,请记得使用IDN.toASCII(url)。如果您需要知道哪些字符一般合法:{{3 }}
  • [\ w] {2,63} =具有2到63个字符的单词([a-zA-Z0-9])必须恰好出现一次。 (TLD(顶级域名(例如.com)不能短于2个或超过63个字符)
  • /? =“/” - 可能出现字符。 (有些人或服务器放在最后......无论如何)
  • $ = line end

-

如果你用特殊字符扩展它,它可能如下所示:

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

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

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

点不会被转义,这意味着它与任何角色匹配。此外,我的版本更简单,我从来没有听说过像“test..com”这样的域名(实际上匹配......)

-

演示:https://kb.ucla.edu/articles/what-characters-can-go-into-a-valid-http-url

答案 3 :(得分:4)

@ Avinash的Java兼容版本的答案是

//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);
boolean matches = m.matches();

答案 4 :(得分:2)

pattern="w{3}\.[a-z]+\.?[a-z]{2,3}(|\.[a-z]{2,3})"

这只接受例如www.google.com& www.google.co.in

答案 5 :(得分:-1)

//我用

static boolean esURL(String cadena){

    boolean bandera = false;

    bandera = cadena.matches("\\b(https://?|ftp://|file://|www.)[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]");

    return bandera;
}