Есть замечательная опция в свойствах заказа - "Регулярное выражение для проверки"
Когда выбираешь тип свойства "Строка", то появляется поле для ввода регулярного выражения [URL=https://dev.1c-bitrix.ru/user_help/store/sale/settings/order_props/sale_order_props_edit.php]подробности тут[/URL]
В документации написано:[QUOTE]Указывается регулярное выражения для проверки строки, вводимой покупателем.
[/QUOTE]
ОК. В каком виде указывается, как работает - нигде информации нет.
Пишу для информации, может кому-то понадобиться или эту информацию заметят в ТП и предпримут меры.
А что-тут не так, спросите вы?! А я вам отвечу....
чтобы при оформлении заказа в стандартном шаблоне bootstrap_v4 срабатывала js валидация при заполнении поля, то нужно добавлять регулярное выражение без слешей вначале и конце выражения /...шаблон.../ и тем более без флагов после рег. выражения, потому что в js скрипте регулярное выражение передаётся в new RegExp
[CODE]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'));
}[/CODE]тогда как в php проверяется наличие первого слеша в строке и если его нет, то строка оборачивается с обеих сторон в слеши /...шаблон.../
Получается, что для простого регулярного выражения, для которого не важны наличие флагов можно использовать строку регулярного выражения без открывающего и закрывающего слешей и всё будет работать. Но когда нужно использовать флаги то получаем баги, js валидация перестаёт работать.
как одно из решений выше написанный кусок js скрипта был преобразован в
[CODE]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'));
}
}[/CODE]
Наверное не самое хорошее решение, но оно работает.
Так же хотелось бы иметь в арсенале поле, для вывода сообщения при ошибке валидации для каждого свойства. Так как это уведомление добавляется в lang шаблона и действительно для всех полей с валидацией по рег. выражению.
Если у кого то есть замечания или советы, как решить этот вопрос проще и лучше, пишите пожалуйста в комментариях.
Всё.
Когда выбираешь тип свойства "Строка", то появляется поле для ввода регулярного выражения [URL=https://dev.1c-bitrix.ru/user_help/store/sale/settings/order_props/sale_order_props_edit.php]подробности тут[/URL]
В документации написано:[QUOTE]Указывается регулярное выражения для проверки строки, вводимой покупателем.
[/QUOTE]
ОК. В каком виде указывается, как работает - нигде информации нет.
Пишу для информации, может кому-то понадобиться или эту информацию заметят в ТП и предпримут меры.
А что-тут не так, спросите вы?! А я вам отвечу....
чтобы при оформлении заказа в стандартном шаблоне bootstrap_v4 срабатывала js валидация при заполнении поля, то нужно добавлять регулярное выражение без слешей вначале и конце выражения /...шаблон.../ и тем более без флагов после рег. выражения, потому что в js скрипте регулярное выражение передаётся в new RegExp
[CODE]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'));
}[/CODE]тогда как в php проверяется наличие первого слеша в строке и если его нет, то строка оборачивается с обеих сторон в слеши /...шаблон.../
Получается, что для простого регулярного выражения, для которого не важны наличие флагов можно использовать строку регулярного выражения без открывающего и закрывающего слешей и всё будет работать. Но когда нужно использовать флаги то получаем баги, js валидация перестаёт работать.
как одно из решений выше написанный кусок js скрипта был преобразован в
[CODE]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'));
}
}[/CODE]
Наверное не самое хорошее решение, но оно работает.
Так же хотелось бы иметь в арсенале поле, для вывода сообщения при ошибке валидации для каждого свойства. Так как это уведомление добавляется в lang шаблона и действительно для всех полей с валидацией по рег. выражению.
Если у кого то есть замечания или советы, как решить этот вопрос проще и лучше, пишите пожалуйста в комментариях.
Всё.