使用正则表达式验证URL

时间:2015-02-05 09:25:04

标签: regex

我正在尝试使用方案和域名(类似http://www.domainname.com)来验证网址。我正在使用这个正则表达式:

/^(http|https):\/\/[\w.\-]+\.[A-Za-z]{2,6}/

当我输入http://www.ab时,最多6个字符,它返回true,在该长度之后返回false。我该如何处理这种情况?

3 个答案:

答案 0 :(得分:0)

你可以使用这样的正则表达式:https?:\/\/www\..*?\.(com|uk|in)(你必须在结尾指定你想要匹配的内容。

demo here

答案 1 :(得分:0)

试试这个:

^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$

在此测试:https://regex101.com/r/xR0oV9/1

让我纠正你的模式,仅供参考。

(http|https)代替(https?)短得多http因为s部分将在两种情况下都有,[A-Za-z]是可选的。

而不是:[a-z]您可以使用小写字母:i并在模式的末尾添加/修饰符(在最后一次斜杠{{1}}之后)将意味着不区分大小写的匹配。

答案 2 :(得分:0)

来自diegoperini的这个可能有点长,但因此它几乎是完美的(至少在我眼里)。

_^(?:(?:https?|ftp)://)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\x{00a1}-\x{ffff}0-9]+-?)*[a-z\x{00a1}-\x{ffff}0-9]+)(?:\.(?:[a-z\x{00a1}-\x{ffff}0-9]+-?)*[a-z\x{00a1}-\x{ffff}0-9]+)*(?:\.(?:[a-z\x{00a1}-\x{ffff}]{2,})))(?::\d{2,5})?(?:/[^\s]*)?$_iuS

如果你想在C#中使用它,你必须稍微改变它。我已经在不久前做过这个了。

^(?:(?:https?|ftp)://)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})))(?::\d{2,5})?(?:/[^\s]*)?$