我需要一个符合以下条件的url验证器正则表达式:
- 协议(HTTP、HTTPS(是可选的但是如果给定任何协议,则必须采用正确的格式,即protocol:domain,或protocol://domain.
- www是可选的
- 可以使用直接IP地址
因此,根据标准,这些应该通过:
- http://www.google.com
- 谷歌
- abc.def.ghi/hij
- https:216.239.38.120
- 216.239.38.120
这些不应该通过:
- 你好
- 你好/世界
- abc://def.ghi
- ftp:google.com
我找到的最接近的正则表达式来自这里:
^((?:.|n)*?)((http://www.|https://www.|http://|https://)?[a-z0-9]+([-.]{1}[a-z0-9]+)([-A-Z0-9.]+)(/[-A-Z0-9+&@#/%=~_|!:,.;]*)?(?[A-Z0-9+&@#/%=~_|!:,.;]*)?)
但不幸的是,google.com
没有通过。它需要有www.
作为前缀。你能改进这个正则表达式使www.
成为可选的吗?
看起来以下模式符合您的标准:
^(?:https?://(?:www.)?|https:(?://)?)?w+(?:[-.]w+)+(?:/[^/s]+)*$
请参阅regex演示详细信息:
^
-字符串的开头(?:https?://(?:www.)?|https:(?://)?)?
-可选序列:https?://(?:www.)?
-http
或https
、://
,然后是可选的www.
子字符串|
-或https:(?://)?
-https:
,然后是可选的//
字符串
w+
-一个或多个单词字符(?:[-.]w+)+
-.
或-
的一个或多个序列,后跟一个或更多单词字符(?:/[^/s]+)*
-/
的可选序列,然后是除/
和空白之外的一个或多个字符$
—字符串结束