Проверка на наличии ссылки в поле, и ее обрезание
Добрый день, :thanks:
Сразу к делу. есть input, при изменении которого вызывается функция. эту функцию надо сделать проверкой, введена ссылка в инпут, или это текст какойто, и если это ссылка, то надо обрезать эту ссылку до домена, например: http://google.com/ Обрезает в google.com https://www.google.ru/intl/ru/ads/ обрезает в www.google.com регуляры мне кажется не дано понять :-E Заранее спасибо за помощь, буду проверять тему постоянно, это важно :) |
var a = "Сразу к делу.\ есть input, при изменении которого вызывается функция.\ эту функцию надо сделать проверкой, введена ссылка в инпут, или это текст какойто,\ и если это ссылка, то надо обрезать эту ссылку до домена,\ например: http://google.com/ Обрезает в google.com\ https://www.google.ru/intl/ru/ads/ обрезает в www.google.com\ ftp://hehe.ru/, file://localhost/"; alert( a.replace( /(?:https?|file|ftp):\/\/([^\/\s]+)[^\s]*/ig, '$1') ); |
<input id='input' type='text' onchange='prov()'> <script type='text/javascript'> var reg = /(http\:\/\/)|(https\:\/\/)|(file\:\/\/\/)|(ftp\:\/\/)/img; function prov(){ input = document.getElementById("input"); input.value = input.value.replace(reg,""); } </script> |
Dim@,
во намудрил, это не проще ли? /(?:https?|file|ftp):\/\/([^\/\s]+)[^\s]*/ig |
devote,
проще - я давно реги не читал плохо помню - единственное что помню - это что \d - означает [0-9]:thanks: |
А вот еще один момент.
вдруг человек введет ссылку без www, http, https, и другой левой частью? т.е. google.com/intl/ru/ads/ обрезает в google.com |
devote,
люди совсем обленились - не хотят учить реги - Цитата:
Цитата:
Цитата:
|
RazZzeR,
чъя рега? |
знать бы что это :))))
|
Цитата:
var a = "google.com/intl/ru/ads/ обрезает в google.com\ например: http://google.com/ Обрезает в google.com\ https://www.google.ru/intl/ru/ads/ обрезает в www.google.com\ ftp://hehe.ru/, file://localhost/ http://президент.рф/sdf/ www.google.ru/intl/ru/ президент.рф/sdf/"; alert( a.replace( /(?:(?:https?|file|ftp)?:?\/\/([^\/\s]+)|([^\/]+\.(?:ru|com|net|org|biz|info|рф)))[^\s]*/ig, '$1$2') ); |
насчет этого:
https://www.google.ru/intl/ru/ads/ обрезает в www.google.com\ жестоко ошибся))) https://www.google.ru/intl/ru/ads/ в www.google.ru или google.ru. сейчас проверю, подходят ли предоставленные вами варианты, спасибо! |
<input size="100" type="text" value="https://www.google.ru/intl/ru/ads/ //mc.yandex.ru/watch/528861" onblur="_F(this)" onchange="_F(this)" > <script type="text/javascript"> function _F(a) { function TST_lnk (str, p1, offset, s) { var d = p1.replace(/(?:https?\:)?\/\/([^\/]+)\/.*/ig,'$1'); str=str.replace(p1,d); return str; } var b=a.value.replace(/(?:^|\s)(\S+)(?=(?:\s|$))/igm,TST_lnk) a.value=b; } </script> |
Deff,
решил внести свою лепту.. что-то у тебя всегда громоздкие коды получаются. все тоже самое делает эта рега и даже больше: var a = "https://www.google.ru/intl/ru/ads/ //mc.yandex.ru/watch/528861"; alert( a.replace( /(?:(?:https?|file|ftp)?:?\/\/([^\/\s]+)|([^\/]+\.(?:ru|com|net|org|biz|info|рф)))[^\s]*/ig, '$1$2') );дык вот объясни в чем смысл рекурсию делать? |
Громоздкий код это не так страшно, но все же я за оптимизацию :)
если вводить mc.yandex.ru/watch/528861, то он так и остается mc.yandex.ru/watch/528861 тоесть правая часть не обрабается, если нет левой |
Цитата:
|
devote и Deff, буду должен :)
|
Цитата:
*Вначале редко думаю об оптимизации - главное - незатенённость и результат , тем паче тут много желающих поправить |
а можно сделать вот так:
скрипт возвращяет из всего текста только ссылку (можно и ссылки массивом) ? |
Часовой пояс GMT +3, время: 15:54. |