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)
您可以使用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)
然后就不需要正则表达式了.
如果您使用Java,建议您使用此RegEx(我自己写的):
^(https?:\/\/)?(www\.)?([\w]+\.)+[??\w]{2,63}\/?$
"^(https?:\\/\\/)?(www\.)?([\\w]+\\.)+[??\\w]{2,63}\\/?$" // as Java-String
Run Code Online (Sandbox Code Playgroud)
解释:
--
如果用特殊字符扩展它,则可能看起来像这样:
^(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”之类的网址。