Как-то столкнулся я с ошибкой регулярного выражения JS в одном из своих модулей, когда полю формы применяешь JS-валидацию на "Ваше имя", то появлялась JS-ошибка и скрипты не работали.
Проблема появлялась после конвертации файлов модуля маркетплейсом в другую кодировку, т.к. регулярное выражение содержит кириллические символы, необходимо вынести его в лэнги, но вот тут и возникла у меня проблема, после выноса регулярного выражения в лэнги оно в JS становится строкой, а не регулярным выражением и опять не работает.
Чтобы регулярное выражение JS с кириллическими символами корректно работало в Битрикс модуле после конвертации на маркетплейс необходимо:
1) Создаем в модуле файл лэнга, любое имя, например:
/bitrix/modules/api.feedback/lang/ru/js_lang.php
Содержимое этого файла, обратите внимание, регулярка пишется без скобок и модификаторов, только само выражение.
$MESS['API_MF_VALIDATION_RULES_NAME'] = '^[ёЁa-zA-Zа-яА-Я\'\s-]+$';
2) Теперь изменим регулярку в js-скрипте, например, тут живет очень хороший js-валидатор форм
/bitrix/js/api.feedback/validation/jquery.validation.min.js
Регулярке NAME подставляем лэнг BX.message() и с помощью new RegExp() создаем конструктор объекта регулярного выражения + применим модификатор i
Я показал все регулярки, они вам еще ни раз пригодятся, пользуйтесь
/**
* @private
* RegExp rules
*/
var _rules = {
NOTEMPTY: /\S/,
INTEGER: /^\d+$/,
NUMERIC: /^\d+(?:[,\s]\d{3})*(?:\.\d+)?$/,
MIXED: /^[\w\s-]+$/,
NAME: new RegExp(BX.message('API_MF_VALIDATION_RULES_NAME'),'i'),
NOSPACE: /^(?!\s)\S*$/,
TRIM: /^[^\s].*[^\s]$/,
DATE: /^\d{4}-\d{2}-\d{2}(\s\d{2}:\d{2}(:\d{2})?)?$/,
EMAIL: /^([^@]+?)@(([a-z0-9]-*)*[a-z0-9]+\.)+([a-z0-9]+)$/i,
URL: /^(https?:\/\/)?((([a-z0-9]-*)*[a-z0-9]+\.?)*([a-z0-9]+))(\/[\w?=\.-]*)*$/,
PHONE: /^\+?\s*[^0]+\d+\s*([\-\s\d\(\)]+)?$/,
OPTIONAL: /\S/,
COMPARISON: /^\s*([LV])\s*([<>]=?|==|!=)\s*([^<>=!]+?)\s*$/
};
3) Регистрируем JS-расширение модуля в файле include.php, например:
/bitrix/modules/api.feedback/include.php
Таким образом, но это не все возможности расширения, подробнее смотрите в документации Битрикса
CJSCore::RegisterExt(
'api_feedback_validation',
array(
'js' => '/bitrix/js/api.feedback/validation/jquery.validation.min.js',
'lang' => '/bitrix/modules/api.feedback/lang/' . LANGUAGE_ID . '/js_lang.php',
)
);
4) Где-нибудь в шаблоне сайта, или в компоненте, или в include.php и т.д. подключаем JS-расширение модуля, например, у меня это в компоненте component.php
if($arParams['INCLUDE_VALIDATION'])
{
CJSCore::Init(array('api_feedback_validation'));
}
Все, после этого и регулярка будет работать верно, и скрипт не поломается после конвертации.