Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Проверка на наличии ссылки в поле, и ее обрезание (https://javascript.ru/forum/dom-window/30024-proverka-na-nalichii-ssylki-v-pole-i-ee-obrezanie.html)

RazZzeR 21.07.2012 14:11

Проверка на наличии ссылки в поле, и ее обрезание
 
Добрый день, :thanks:
Сразу к делу.
есть input, при изменении которого вызывается функция.
эту функцию надо сделать проверкой, введена ссылка в инпут, или это текст какойто,
и если это ссылка, то надо обрезать эту ссылку до домена,
например: http://google.com/ Обрезает в google.com
https://www.google.ru/intl/ru/ads/ обрезает в www.google.com

регуляры мне кажется не дано понять :-E

Заранее спасибо за помощь, буду проверять тему постоянно, это важно :)

devote 21.07.2012 14:21

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') );

Dim@ 21.07.2012 14:27

<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>

devote 21.07.2012 14:33

Dim@,
во намудрил, это не проще ли?
/(?:https?|file|ftp):\/\/([^\/\s]+)[^\s]*/ig

Dim@ 21.07.2012 14:35

devote,
проще - я давно реги не читал плохо помню - единственное что помню - это что \d - означает [0-9]:thanks:

RazZzeR 21.07.2012 14:38

А вот еще один момент.
вдруг человек введет ссылку без www, http, https, и другой левой частью?
т.е. google.com/intl/ru/ads/ обрезает в google.com

Dim@ 21.07.2012 14:38

devote,
люди совсем обленились - не хотят учить реги -
Цитата:

Мой мозг отказывается понимать рег-экспы
Цитата:

Помогите с регами очень нужно плз
Цитата:

Я вообще не понимаю регулярные выажения
:)

Dim@ 21.07.2012 14:39

RazZzeR,
чъя рега?

RazZzeR 21.07.2012 14:50

знать бы что это :))))

devote 21.07.2012 15:09

Цитата:

Сообщение от RazZzeR
А вот еще один момент.
вдруг человек введет ссылку без www, http, https, и другой левой частью?
т.е. google.com/intl/ru/ads/ обрезает в google.com

ну молодцы, раз так введут.. откуда же реги знать домен это или фича какая нить. Можно конечно прописать правила на верхние домены:
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') );

RazZzeR 21.07.2012 15:11

насчет этого:
https://www.google.ru/intl/ru/ads/ обрезает в www.google.com\

жестоко ошибся)))
https://www.google.ru/intl/ru/ads/ в www.google.ru или google.ru.
сейчас проверю, подходят ли предоставленные вами варианты,
спасибо!

Deff 21.07.2012 15:13

<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>

devote 21.07.2012 15:24

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') );
дык вот объясни в чем смысл рекурсию делать?

RazZzeR 21.07.2012 15:31

Громоздкий код это не так страшно, но все же я за оптимизацию :)

если вводить mc.yandex.ru/watch/528861, то он так и остается mc.yandex.ru/watch/528861

тоесть правая часть не обрабается, если нет левой

RazZzeR 21.07.2012 15:32

Цитата:

Сообщение от devote (Сообщение 190489)
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') );
дык вот объясни в чем смысл рекурсию делать?

а вот у тебя обрезалась :victory:

RazZzeR 21.07.2012 15:36

devote и Deff, буду должен :)

Deff 21.07.2012 15:39

Цитата:

Сообщение от devote
дык вот объясни в чем смысл рекурсию делать?

Дык Военный потому шо - делай раз - делай два(По разделениям всё ООП построено) -В первой части обрезаем по разделителю - во второй - уже трансформируем
*Вначале редко думаю об оптимизации - главное - незатенённость и результат , тем паче тут много желающих поправить

RazZzeR 09.08.2012 03:15

а можно сделать вот так:
скрипт возвращяет из всего текста только ссылку (можно и ссылки массивом)
?


Часовой пояс GMT +3, время: 15:54.