Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Регулярка: выдает true, но не хочет давать false (https://javascript.ru/forum/misc/3994-regulyarka-vydaet-true-no-ne-khochet-davat-false.html)

Trojan 11.06.2009 17:01

Регулярка: выдает 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 = '';

Kolyaj 11.06.2009 17:43

А теперь без лишнего мусора, просто регулярка и текст, на котором она якобы не правильно работает.

Trojan 11.06.2009 19:23

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

Так понятнее?

Riim 11.06.2009 19:59

У меня сразу false .

Trojan 11.06.2009 20:06

если подставляешь вместо 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 не выполняет(((

Riim 11.06.2009 20:12

Так там же к value пустая строка присваивается. Регулярка, получается, будет проверять, есть ли у строки начало. У любой строки есть начало.

Trojan 11.06.2009 20:22

Ну смотри, если в поле ввода article будет value 7, значит регулярка reg = ^7. Я начинаю тестить строку допустим '54': reg.test('54'); В итоге-то должно быть false, а у меня при false вообще alert не выводит! Только когда true... Мне нужно проверить, есть ли вхождение вводимого значения в поле ввода в тестируемой строке только с начала строки, т.е. 765 в 765-456 даст true, а 765 в 465-765 даст уже false.

Riim 11.06.2009 20:44

Попробуй экранировать символы в value:
RegExp.escape = function(str) {
	return (str + '').replace(/([?!^$.(){}:|=[\]+\-\/\\*])/g, '\\$1');
};

ZoNT 15.06.2009 16:07

попробуй проверить, а приходит ли в document.ACT.article.value какое-нибудь значение....

Trojan 16.06.2009 12:23

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


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