Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.06.2009, 17:01
Аватар для Trojan
Новичок на форуме
Отправить личное сообщение для Trojan Посмотреть профиль Найти все сообщения от Trojan
 
Регистрация: 11.06.2009
Сообщений: 5

Регулярка: выдает true, но не хочет давать false
Всем салют! Возникла трабла следующего характера: при поиске вхождения подстроки в строку в переменную закидывается true, а false ни в какую, при отрицательном результате. Например '745' входит в подстроку '745-84' , в результате true. А если '756', то по идее false. Может кто сталкивался с подобными чудесами. :wacko: Вот сама функция:
var docTEXT = requestObj.responseText; // это ответ от сервера
var reg = new RegExp('[^_]+','g');
var reg_art = new RegExp('^'+document.ACT.article.value); // например: ^765
var result;
var res_art;
if (docTEXT != '')
{
res_art = reg.exec(docTEXT); //напр. 765-489
result = reg_art.test(res_art); // 765 ищем в 765-489
alert(result); // вот тут выводит true или false
if (result==true) {
document.getElementById("art").innerHTML='Арти кул: '+res_art;
document.ACT.art_name.value = reg.exec(docTEXT);
document.ACT.kol_b.value = reg.exec(docTEXT);
document.ACT.coast.value = reg.exec(docTEXT);
return 0;
}

//вот этот код вообще не выполняется, т.к. значение false alert'ом не выводится
document.getElementById("art").style.display = 'none';
document.ACT.art_name.value = '';
document.ACT.kol_b.value = '';
document.ACT.coast.value = '';

Последний раз редактировалось Trojan, 11.06.2009 в 20:09.
Ответить с цитированием
  #2 (permalink)  
Старый 11.06.2009, 17:43
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

А теперь без лишнего мусора, просто регулярка и текст, на котором она якобы не правильно работает.
Ответить с цитированием
  #3 (permalink)  
Старый 11.06.2009, 19:23
Аватар для Trojan
Новичок на форуме
Отправить личное сообщение для Trojan Посмотреть профиль Найти все сообщения от Trojan
 
Регистрация: 11.06.2009
Сообщений: 5

reg = new RegExp('^'+document.ACT.article.value); //допустим тут '765'
result = reg.test('766-489');
alert(result); - вот тут не выводит значение false, только true

Так понятнее?
Ответить с цитированием
  #4 (permalink)  
Старый 11.06.2009, 19:59
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

У меня сразу false .
Ответить с цитированием
  #5 (permalink)  
Старый 11.06.2009, 20:06
Аватар для Trojan
Новичок на форуме
Отправить личное сообщение для Trojan Посмотреть профиль Найти все сообщения от Trojan
 
Регистрация: 11.06.2009
Сообщений: 5

если подставляешь вместо document.ACT.article.value готовое значение, допустим '735' то false, а если выдергиваешь value из поля ввода article формы ACT, то кусок кода ниже:

document.getElementById("art").style.display = 'none';
document.ACT.art_name.value = '';
document.ACT.kol_b.value = '';
document.ACT.coast.value = '';

при значении false не выполняет(((
Ответить с цитированием
  #6 (permalink)  
Старый 11.06.2009, 20:12
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Так там же к value пустая строка присваивается. Регулярка, получается, будет проверять, есть ли у строки начало. У любой строки есть начало.
Ответить с цитированием
  #7 (permalink)  
Старый 11.06.2009, 20:22
Аватар для Trojan
Новичок на форуме
Отправить личное сообщение для Trojan Посмотреть профиль Найти все сообщения от Trojan
 
Регистрация: 11.06.2009
Сообщений: 5

Ну смотри, если в поле ввода article будет value 7, значит регулярка reg = ^7. Я начинаю тестить строку допустим '54': reg.test('54'); В итоге-то должно быть false, а у меня при false вообще alert не выводит! Только когда true... Мне нужно проверить, есть ли вхождение вводимого значения в поле ввода в тестируемой строке только с начала строки, т.е. 765 в 765-456 даст true, а 765 в 465-765 даст уже false.
Ответить с цитированием
  #8 (permalink)  
Старый 11.06.2009, 20:44
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Попробуй экранировать символы в value:
RegExp.escape = function(str) {
	return (str + '').replace(/([?!^$.(){}:|=[\]+\-\/\\*])/g, '\\$1');
};
Ответить с цитированием
  #9 (permalink)  
Старый 15.06.2009, 16:07
Флудер
Отправить личное сообщение для ZoNT Посмотреть профиль Найти все сообщения от ZoNT
 
Регистрация: 25.07.2008
Сообщений: 1,271

попробуй проверить, а приходит ли в document.ACT.article.value какое-нибудь значение....
Ответить с цитированием
  #10 (permalink)  
Старый 16.06.2009, 12:23
Аватар для Trojan
Новичок на форуме
Отправить личное сообщение для Trojan Посмотреть профиль Найти все сообщения от Trojan
 
Регистрация: 11.06.2009
Сообщений: 5

Тема закрыта, во всем "виноват" был docTEXT на который приходило "", из-за этого блок просто пропускался) Спасибо всем за помощь, особенно мне)))
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с оперой Ден Opera, Safari и др. 1 22.03.2009 15:49