Есть ли у кого-нибудь регулярное выражение для проверки URL-адресов (НЕ для нахождения их внутри текстового прохода)? Рекомендуется использовать фрагмент JavaScript.
Регулярное выражение для проверки URL (в JavaScript)
Ответ 1
Синтаксис фактического URL довольно сложный и нелегко представить в regex. Большинство простых выглядящих регулярных выражений дадут множество ложных негативов, а также ложных срабатываний. Смотрите на развлечение эти усилия, но даже конечный результат не очень хорош.
Плюс в эти дни вы обычно хотели бы разрешить IRI, а также URI старой школы, поэтому мы можем ссылаться на действительные адреса, например:
http://en.wikipedia.org/wiki/Þ
http://例え.テスト/
Я бы пошел только на простые проверки: начинается ли это с известного метода: name? Является ли он свободным от пробелов и двойных кавычек? Если да, то ад, это, вероятно, достаточно хорошо.
Ответ 2
В принятом ответе bobince верно: подтверждение только имени схемы://, а пробелов и двойных кавычек обычно достаточно. Вот как валидация может быть реализована в JavaScript:
var url = 'http://www.google.com';
var valid = /^(ftp|http|https):\/\/[^ "]+$/.test(url);
// true
или
var r = /^(ftp|http|https):\/\/[^ "]+$/;
r.test('http://www.goo le.com');
// false
или
var url = 'http:www.google.com';
var r = new RegExp('/^(ftp|http|https):\/\/[^ "]+$/');
r.test(url);
// false
Ссылки для синтаксиса:
Ответ 3
Попробуйте это регулярное выражение
/(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
Он работает лучше всего для меня.
Ответ 4
<html>
<head>
<title>URL</title>
<script type="text/javascript">
function validate() {
var url = document.getElementById("url").value;
var pattern = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
if (pattern.test(url)) {
alert("Url is valid");
return true;
}
alert("Url is not valid!");
return false;
}
</script>
</head>
<body>
URL :
<input type="text" name="url" id="url" />
<input type="submit" value="Check" onclick="validate();" />
</body>
</html>
Ответ 5
Я использую регулярное выражение /^ [a-z] +: [^:] + $/i для проверки URL. См. Пример моего кросс-браузера InputKeyFilter код с проверкой URL.
<!doctype html>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Input Key Filter Test</title>
<meta name="author" content="Andrej Hristoliubov [email protected]">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<!-- For compatibility of IE browser with audio element in the beep() function.
https://www.modern.ie/en-us/performance/how-to-use-x-ua-compatible -->
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<link rel="stylesheet" href="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.css" type="text/css">
<script type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/Common.js"></script>
<script type="text/javascript" src="https://rawgit.com/anhr/InputKeyFilter/master/InputKeyFilter.js"></script>
</head>
<body>
URL:
<input type="url" id="Url" value=":"/>
<script>
CreateUrlFilter("Url", function(event){//onChange event
inputKeyFilter.RemoveMyTooltip();
var elementNewInteger = document.getElementById("NewUrl");
elementNewInteger.innerHTML = this.value;
}
//onblur event. Use this function if you want set focus to the input element again if input value is NaN. (empty or invalid)
, function(event){ this.ikf.customFilter(this); }
);
</script>
New URL: <span id="NewUrl"></span>
</body>
</html>
Ответ 6
попробуйте следующее:
var RegExp =/^(?:(?:https?|ftp):\/\/)(?:\S+(?::\S*)[email protected])?(?:(?!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]*)?$/i;
Ответ 7
/(?:http[s]?\/\/)?(?:[\w\-]+(?::[\w\-]+)[email protected])?(?:[\w\-]+\.)+(?:[a-z]{2,4})(?::[0-9]+)?(?:\/[\w\-\.%]+)*(?:\?(?:[\w\-\.%]+=[\w\-\.%!]+&?)+)?(#\w+\-\.%!)?/
Ответ 8
Я нашел некоторый успех в этом:
/^((ftp|http|https):\/\/)?www\.([A-z]+)\.([A-z]{2,})/
- Он проверяет одно или ни одно из следующего: ftp://, http://или https://
- Для этого требуется www.
- Он проверяет любое количество допустимых символов.
- Наконец, он проверяет, что у него есть домен, и этот домен имеет не менее 2 символов.
Это явно не идеально, но он отлично справлялся со своими делами
Ответ 9
Попробуй, это сработает для меня:
/^(http[s]?:\/\/){0,1}(w{3,3}\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/;
Ответ 10
Попробуйте regex, он работает для меня:
function isUrl(s) {
var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
return regexp.test(s);
}
Ответ 11
После длительного исследования я создаю это выражение reg. Я надеюсь, что это тоже поможет другим людям.
url = 'https://google.co.in';
var re = /[a-z0-9-\.]+\.[a-z]{2,4}\/?([^\s<>\#%"\,\{\}\\|\\\^\[\]`]+)?$/;
if (!re.test(url)) {
alert("url error");
return false;
}else{
alert('success')
}