Есть замечательная опция в свойствах заказа - "Регулярное выражение для проверки" Когда выбираешь тип свойства "Строка", то появляется поле для ввода регулярного выражения подробности тут
В документации написано:
Цитата
Указывается регулярное выражения для проверки строки, вводимой покупателем.
ОК. В каком виде указывается, как работает - нигде информации нет.
Пишу для информации, может кому-то понадобиться или эту информацию заметят в ТП и предпримут меры.
А что-тут не так, спросите вы?! А я вам отвечу....
чтобы при оформлении заказа в стандартном шаблоне bootstrap_v4 срабатывала js валидация при заполнении поля, то нужно добавлять регулярное выражение без слешей вначале и конце выражения /...шаблон.../ и тем более без флагов после рег. выражения, потому что в js скрипте регулярное выражение передаётся в new RegExp
Код
if (value.length > 0 && arProperty.PATTERN && arProperty.PATTERN.length)
{
re = new RegExp(arProperty.PATTERN);
if (!re.test(value))
errors.push(field + ' ' + BX.message('SOA_INVALID_PATTERN'));
}
тогда как в php проверяется наличие первого слеша в строке и если его нет, то строка оборачивается с обеих сторон в слеши /...шаблон.../
Получается, что для простого регулярного выражения, для которого не важны наличие флагов можно использовать строку регулярного выражения без открывающего и закрывающего слешей и всё будет работать. Но когда нужно использовать флаги то получаем баги, js валидация перестаёт работать.
как одно из решений выше написанный кусок js скрипта был преобразован в
Код
if (value.length > 0 && arProperty.PATTERN && arProperty.PATTERN.length) {
//Добавляем флаги в RegExp
var preparePattern = /^(\/)(.*)([\/])([\/miug]+)$/;
var pattern = arProperty.PATTERN.match(preparePattern);
if(!pattern){
re = new RegExp(arProperty.PATTERN);
if (!re.test(value))
errors.push(field + ' ' + BX.message('SOA_INVALID_PATTERN'));
}else{
re = new RegExp(pattern[2], pattern[4]);
if (!re.test(value))
errors.push(field + ' ' + BX.message('SOA_INVALID_PATTERN'));
}
}
Наверное не самое хорошее решение, но оно работает.
Так же хотелось бы иметь в арсенале поле, для вывода сообщения при ошибке валидации для каждого свойства. Так как это уведомление добавляется в lang шаблона и действительно для всех полей с валидацией по рег. выражению.
Если у кого то есть замечания или советы, как решить этот вопрос проще и лучше, пишите пожалуйста в комментариях.