Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.05.2010, 13:44
Интересующийся
Отправить личное сообщение для Arconas Посмотреть профиль Найти все сообщения от Arconas
 
Регистрация: 21.05.2010
Сообщений: 11

RegExp и search. Проблема с переменной в выражении
Здравствуйте.
Столкнулся с не совсем понятной мне вещью. Имеется регулярное выражение вида: /1 + id_user + [0-9]/. Отвечает это регулярное выражение за тривиальную задачу - в зависимости от пришедшего числа пользователь наблюдает в чат-приложении сообщение "Входящее приватное сообщение". Выкладываю часть кода, относящегося именно к проблеме. Значения channel и id_user приходят из XML. JS парсит ответ сервера и выводит пользователю на экран.

/*...*/
var channel = channelArray.item(i).firstChild.data.toString();
var id_user = nameArray.item(i).getAttribute("id_user");
var UserToArrow = new RegExp('1' + id_user + '[0-9]');
  if(channel.search(UserToArrow) > -1 ){
           htmlMessage += "[входящий приват] ";
           displayMessage (htmlMessage);
        }
/*...*/


Если поставить var id_user = '1', к примеру, то шаблон работает замечательно. Если же значение переменной приходит через nameArray.item(i).getAttribute("id_user"); то не работает. Ставил alert и на id_user и на UserToArrow. Шаблон формируется правильно, id_user - это номер текущего клиента. Firebug не ругается. Никак не могу понять в чем проблема и решил спросить у знающих людей.
Ответить с цитированием
  #2 (permalink)  
Старый 21.05.2010, 13:50
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 30.03.2010
Сообщений: 1,813

потому что это string а вам надо, как я понял число.
используйте parseInt()
__________________
.
Ответить с цитированием
  #3 (permalink)  
Старый 21.05.2010, 14:45
Интересующийся
Отправить личное сообщение для Arconas Посмотреть профиль Найти все сообщения от Arconas
 
Регистрация: 21.05.2010
Сообщений: 11

Сообщение от Skipp Посмотреть сообщение
потому что это string а вам надо, как я понял число.
используйте parseInt()
Скорее всего я не совсем правильно вас понял, но приведение id_user к числу результата не даёт, а если привести channel, то firebug ругается channel.search(UserToArrow) is not a function.

К тому же у меня и channel и id_user это string. То есть мне надо сформировать строку, которая будет регулярным выражением и по нему проверить channel. Числа мне по сути вообще не нужны, так как в будущем будут для идентификатора пользователя использоваться по особому сгенерированная строка.

UPD: сейчас проверил форматы:
var id_user = nameArray.item(i).getAttribute("id_user");
        var t = '1';
        var UserToArrow = new RegExp('1' + t + '2');
        alert(typeof(id_user));
        alert(typeof(t));

id_user is string.
t is string.
Но если поставить вместо t id_user, то шаблон не работает, хотя формат одинаковый. Я ничего уже не понимаю.

Последний раз редактировалось Arconas, 21.05.2010 в 15:34.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
RegExp проблема - чередование результатов KOLANICH Общие вопросы Javascript 7 21.02.2010 21:48
Проблема с кавычкой в регулярном выражении bandolero Общие вопросы Javascript 5 31.01.2010 10:37