Об использовании RegExp в «КурсЛабе» впервые подумал, когда понял, что в обычном условии сравнение строк в некоторых случаях происходит некорректно
Подвернулась задача провести проверку пользовательского ввода, при которой верными будут считаться следующие значения: 0700, 07:00, 07.00, 07 00 и 07,00. Опять на ум из молодости вернулись «регэкспы».
Оказалось, что и в CourseLab при помощи JavaScript их можно использовать. Для этого обработчик надо разместить в папке проекта под названием «1» в файле «module.js».
Механизм для передачи значений переменных от этого файла «КурсЛабу» немного описан в разделе «Для опытных пользователей».
Вызов функции из действий объектов происходит следующим образом:
Указываем имя переменной тому полю, ввод в которое будем проверять, и ограничиваем по длине.
Затем проверяем кодом в файле module.js допустимые значения.
// RegWord function RegWord() { CLV.oSlide["bylo"] = 'neverno'; //В переменную txt вношу значение поля ввода var txt = CLV.oSlide["fulltext"]; var reps = 'a' + txt; //Задаю шаблон регулярного выражения для 0700 var srch1 = "0700$"; var re1 = new RegExp(srch1,'i');//Флаг i - независимости от регистра в конкретном примере не нужен, но оставлю для наглядности var itog1 = reps.search(re1); //Если в поле ввели 0700 if(itog1>0) { CLV.oSlide["bylo"] = 'verno'; } //Задаю шаблон регулярного выражения для остальных значений var srch2 = "07[.,: ]00$"; var re2 = new RegExp(srch2,'i'); var itog2 = reps.search(re2); //Проверка ввода остальных допустимых комбинаций if(itog2>0) { CLV.oSlide["bylo"] = 'verno'; } itog1=0; itog2=0; srch1=0; srch2=0; re1=0; re2=0; }
Далее уже на основе сравнения введенного значения с шаблоном произвожу дальнейшие манипуляции уже в «КурсЛабе».
Этот пост в блоге я разместил не только для того, чтобы с кем-то поделиться информацией об использовании регулярных выражений в CourseLab, но и, возможно, чтобы получить новые знания для себя. Данная конструкция позволяет в конкретном примере корректно пропустить все значения кроме одного (x0700). Сейчас объясню почему.
Не владею на должном уровне RegExp или JS, но почему-то не получается задать «паттерн» с флагом начала и конца строки, например "^0700$". Такая конструкция не дает нужный результат, как будто в переменную поля ввода автоматически добавляется еще какой-то невидимый символ. Пытался проверить вводимые данные посимвольно – вроде ничего нет. Или же иным образом оформить шаблон нужно...
Из-за этой особенности приходится к введенному значению добавлять вперед символ (var reps = 'a' + txt;) и тогда уже сравнение происходит корректное, если вводится 5 символов (например, «07 00»). Если же 4, как в случае с «0700», то правильным засчитывается и один ложный вариант «x0700». Может, надо несколько иную конструкцию использовать, а не reps.search(re1). Пока ответа не нашел. Буду признателен, если кто подскажет.