LIFEL
рекомендует

Регулярные выражения в CourseLab

29.08.2016
Андрей Матюков
Об использовании RegExp в «КурсЛабе» впервые подумал, когда понял, что в обычном условии сравнение строк в некоторых случаях происходит некорректно
Подвернулась задача провести проверку пользовательского ввода, при которой верными будут считаться следующие значения: 0700, 07:00, 07.00, 07 00 и 07,00. Опять на ум из молодости вернулись «регэкспы».

Оказалось, что и в CourseLab при помощи JavaScript их можно использовать. Для этого обработчик надо разместить в папке проекта под названием «1» в файле «module.js».
Регулярные выражения в CourseLab
Механизм для передачи значений переменных от этого файла «КурсЛабу» немного описан в разделе «Для опытных пользователей».
Регулярные выражения в CourseLab
Вызов функции из действий объектов происходит следующим образом:
Регулярные выражения в CourseLab
Указываем имя переменной тому полю, ввод в которое будем проверять, и ограничиваем по длине.
CourseLab и Mirapolis
Затем проверяем кодом в файле module.js допустимые значения.
CourseLab и Mirapolis
Пример кода
// 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
Этот пост в блоге я разместил не только для того, чтобы с кем-то поделиться информацией об использовании регулярных выражений в CourseLab, но и, возможно, чтобы получить новые знания для себя. Данная конструкция позволяет в конкретном примере корректно пропустить все значения кроме одного (x0700). Сейчас объясню почему.

Не владею на должном уровне RegExp или JS, но почему-то не получается задать «паттерн» с флагом начала и конца строки, например «^0700 $». Такая конструкция не дает нужный результат, как будто в переменную поля ввода автоматически добавляется еще какой-то невидимый символ. Пытался проверить вводимые данные посимвольно — вроде ничего нет. Или же иным образом оформить шаблон нужно…

Из-за этой особенности приходится к введенному значению добавлять вперед символ (var reps = 'a' + txt;) и тогда уже сравнение происходит корректное, если вводится 5 символов (например, «07 00»). Если же 4, как в случае с «0700», то правильным засчитывается и один ложный вариант «x0700».Может, надо несколько иную конструкцию использовать, а не reps. search (re1). Пока ответа не нашел. Буду признателен, если кто подскажет.
Понравилась статья? Нажми на Лайфика!
статьи по теме