Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Замена частей текста в текстовом поле (https://javascript.ru/forum/misc/28987-zamena-chastejj-teksta-v-tekstovom-pole.html)

Vetall 09.06.2012 22:29

Замена частей текста в текстовом поле
 
Здравствуйте, помогите пожалуйста найти / сделать скрипт, который будет заменять определённые части строки в input поле ввода, например я ввёл в текстовое поле "plugin.dll" после чего скрипт сразу же заменил .dll на .so чтобы в итоге получилось "plugin.so", буду очень благодарен за помощь :)

lord2kim 09.06.2012 22:38

Цитата:

Сообщение от Vetall (Сообщение 180387)
Здравствуйте, помогите пожалуйста найти / сделать скрипт, который будет заменять определённые части строки в input поле ввода, например я ввёл в текстовое поле "plugin.dll" после чего скрипт сразу же заменил .dll на .so чтобы в итоге получилось "plugin.so", буду очень благодарен за помощь :)

как вариант
function replace_string(txt, cut_str, paste_str) {
	var f=0;
	var ht="";
	ht = ht + txt;
	f=ht.indexOf(cut_str);
	while (f!=-1) {
	//цикл для вырезания всех имеющихся подстрок
		f=ht.indexOf(cut_str);
		if (f>0) { ht = ht.substr(0,f) + paste_str + ht.substr(f+cut_str.length); }
	}
	return ht;
}

где txt - строка, cut_str - что заменять, paste_str - на что заменять...

Deff 09.06.2012 23:03

<script type="text/javascript">
function RepINP(a){
//Что, на что меняем
var Ch = 'plugin.dll',My = 'plugin.so';
 a.value = a.value.replace(Ch,My)
}
</script>
<form>
<input id=InpFrm1 type=text name="plugin" onchange="RepINP(this)" autocomplete="off"/>
</form>

Vetall 09.06.2012 23:05

Deff, извините, но это немного не то, надо заменять только .dll, а не всю строку.

Deff 09.06.2012 23:07

Vetall,
Вроде полный код - ткните Запустить

lord2kim 09.06.2012 23:09

Цитата:

Сообщение от Deff (Сообщение 180405)
Vetall,
Вроде полный код - ткните Запустить

а чем мой не понравилса? :)

Dim@ 09.06.2012 23:10

<script type='text/javascript'>
function replace(zam,zam2){
txt = document.getElementById('text').value;
txt = txt.replace(zam,zam2);
document.getElementById('text').value = txt
}
</script>
<input type='text' id='text' onkeydown='replace(".dll",".so")' onfocus='replace(".dll",".so")'
 onblur='replace(".dll",".so")'>

я бы так сделал zam - это то что заменяется, zam2 - на что заменяется

devote 09.06.2012 23:13

Deff,
твой вариант не будет заменять множественное вхождение текста:
var Ch = 'plugin.dll',My = 'plugin.so';
alert( "tratata plugin.dll, param plugin.dll".replace(Ch,My) );
тогда уж лучше делать так:
var Ch = 'plugin.dll',My = 'plugin.so';
alert( "tratata plugin.dll, param plugin.dll".replace( new RegExp( Ch, "g" ), My) );


Цитата:

Сообщение от lord2kim
а чем мой не понравилса?

что-то громоздко как-то.

Цитата:

Сообщение от Dim@
я бы так сделал zam - это то что заменяется, zam2 - на что заменяется

тоже множественное вхождение не сработает.

Dim@ 09.06.2012 23:14

Цитата:

Сообщение от lord2kim (Сообщение 180406)
а чем мой не понравилса? :)

скорее тем что вы не использовали методы рег. выражений :lol:

Dim@ 09.06.2012 23:17

Цитата:

Сообщение от devote (Сообщение 180408)
тоже множественное вхождение не сработает.

=) работает еще как работает

lord2kim 09.06.2012 23:17

Цитата:

Сообщение от Dim@ (Сообщение 180409)
скорее тем что вы не использовали методы рег. выражений :lol:

регулярками дольше обрабатывать...ИМХО

Dim@ 09.06.2012 23:19

Цитата:

Сообщение от lord2kim (Сообщение 180411)
регулярками дольше обрабатывать...ИМХО

ну да нудааа:lol: :lol: :lol: (ладно все таки хватит нам флудить=))

lord2kim 09.06.2012 23:21

Цитата:

Сообщение от Dim@ (Сообщение 180407)
<script type='text/javascript'>
function replace(zam,zam2){
txt = document.getElementById('text').value;
txt = txt.replace(zam,zam2);
document.getElementById('text').value = txt
}
</script>
<input type='text' id='text' onkeydown='replace(".dll",".so")' onfocus='replace(".dll",".so")'
 onblur='replace(".dll",".so")'>

я бы так сделал zam - это то что заменяется, zam2 - на что заменяется

хах) IE не дает клавишами стрелочек бегать по полю...

Deff 09.06.2012 23:22

Цитата:

Сообщение от devote
твой вариант не будет заменять множественное вхождение текста:

Согласён, прост предположил однократное вхождение

Dim@ 09.06.2012 23:23

Цитата:

Сообщение от lord2kim (Сообщение 180414)
хах) IE не дает клавишами стрелочек бегать по полю...

зато другие браузеры дают

devote 09.06.2012 23:24

Dim@,
это только потому что замена происходит за несколько проходов. Тоесть первое меняет при фокусе, второе при блюре, третье при кейдовне... но если одно событие будет.. то будет заменено лишь одно.

попробуйте вставить такую строку:
tratata plugin.dll, param plugin.dll tratata plugin.dll, param plugin.dll tratata plugin.dll, param plugin.dll
и увидите как она не сразу вся замениться.

lord2kim 09.06.2012 23:25

Цитата:

Сообщение от Dim@ (Сообщение 180416)
зато другие браузеры дают

ну как бы желательно предусмотреть все варианты и постарацца обеспечить кроссбраузерность...

Dim@ 09.06.2012 23:28

Цитата:

Сообщение от devote (Сообщение 180417)
Dim@,
это только потому что замена происходит за несколько проходов. Тоесть первое меняет при фокусе, второе при блюре, третье при кейдовне... но если одно событие будет.. то будет заменено лишь одно.

попробуйте вставить такую строку:
tratata plugin.dll, param plugin.dll tratata plugin.dll, param plugin.dll tratata plugin.dll, param plugin.dll
и увидите как она не сразу вся замениться.

да и в правду не сразу

Dim@ 09.06.2012 23:42

<script type='text/javascript'>
function replace(zam,zam2){
txt = document.getElementById('text').value;
zam = new RegExp(zam,'g','i')
txt = txt.replace(zam,zam2);
document.getElementById('text').value = txt
}
</script>
<input type='text' id='text' onkeydown='replace(".dll",".so")' onfocus='replace(".dll",".so")' onblur='replace(".dll",".so")'>

devote
Можно так=)

Deff 09.06.2012 23:43

Dim@,
Ксать вот так мон объединять
<input type='text' id='text' onkeydown=onfocus=onblur='replace(".dll",".so")'>
==================================
Vetall,
Напишите Пару сложных Вариаций вводимой строки и вид замененённой

Vetall 09.06.2012 23:49

Спасибо, но столкнулся с ещё одной проблемой, если в текстовое поле вписать несколько значений (через пробел), например plugin1.dll plugin2.dll и т.д. заменяется только первое значение, можно ли заменять сразу все значения?
воспользовался этим вариантом:

<script type="text/javascript">
function RepINP(a){
var Ch = ".dll", My = ".so";
a.value = a.value.replace(Ch, My)
}
</script>

Deff 10.06.2012 00:02

<script type="text/javascript">
function RepINP(a){
var Ch = ".dll", My = ".so";
a.value = a.value.replace(eval("/"+Ch+"/g"), My)
}
</script>
<form>
<input id=InpFrm1 type=text name="plugin" onchange="RepINP(this)" autocomplete="off"/>
</form>

Dim@ 10.06.2012 00:04

Deff,
спасибо не знал об этом

Vetall 10.06.2012 00:05

Deff, Спасибо)

Dim@ 10.06.2012 00:08

Vetall,
мой тоже все заменяет=)

Vetall 10.06.2012 00:10

Dim@, просто Deff ранее ответил, вот я и взял его вариант за основу :)

Dim@ 10.06.2012 00:17

Vetall,
ну ладно

9xakep 10.06.2012 00:36

Цитата:

Сообщение от Dim@ (Сообщение 180413)
ну да нудааа:lol: :lol: :lol: (ладно все таки хватит нам флудить=))

Вообще-то, это факт, что регулярки обрабатываются очень медленно в js, и порой для оптимизации лучше использовать indexOf

devote 10.06.2012 00:40

Цитата:

Сообщение от 9xakep
Вообще-то, это факт, что регулярки обрабатываются очень медленно в js, и порой для оптимизации лучше использовать indexOf

не всегда.. Вы бы потестили, например как ни странно но ИЕ с регулярками работает в разы быстрее чем обычный indexOf, тоесть если тупо сравнивать скорость:
indexOf('lala');
и
/lala/.test();
то конечно рега будет медленнее.. Но не забывайте что еще нужно выполнить другие действия, замена и т.д. И при сложных манипуляциях со строкой, рега ничем не уступает обычным методам. А порой и обходит по скорости. Я тестировал их, когда писал свой движок селекторов, увы но рега оказалась быстрее для мои требований.

9xakep 10.06.2012 09:21

devote,
ясно, просто кто-то здесь говорил, что их в проекте лучше вообще не использовать, мол памяти драть много будут или что-то в этом роде

rk7 16.10.2013 11:30

Проще воспользоваться готовым плагином для firefox
 
https://addons.mozilla.org/ru/firefo...e-for-firefox/

zoOmer 09.07.2014 03:23

Доброго времени суток ребят) Назрел такой вопросец:
Когда кликаешь 2 раза по полю инпут появляется запомненный список введенных символов в это поле. Так вот как сделать так чтобы при выборе из этого списка к примеру Богдан: в поле инпут автоматически убирался знак двоеточия. И запретить ввод его вообще в это поле.
Пример картинка:


Заранее буду очень благодарен за помощь!

Aetae 09.07.2014 03:54

oninput="this.value = this.value.replace(/:/g,'')"

devote 09.07.2014 10:08

Aetae,
такой способ ему не даст вводить символы в середине текста.

zoOmer 09.07.2014 10:26

Aetae, Спасибо большое этот вариант работает как часы)

zoOmer 09.07.2014 10:30

devote, Мне нужно чтоб просто этого символа двоеточия не было на конце выбранного Имени получателя!
А, вообще да заметил такую вещь когда что нить добавляю к Имени до последнего символа то после вставки одного символа сразу переводит к последнему.

Aetae 09.07.2014 12:55

devote, zoOmer:
oninput="var re=/:*\s*$/; if(re.test(this.value)) this.value = this.value.replace(re,'');"
:)

ОмаЭль 09.12.2014 18:26

Почему не сделать просто так хД
function l(){
var tex="plugin.dll sdf sfsdfsdf sp.dll asd ";
tex=tex.replace(/dll/g,"ol")
alert(tex);
}

<input type="button" OnClick="l()">


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