[Битрикс модули] Лэнг регулярного выражения в JS

22.11.2016

Как-то столкнулся я с ошибкой регулярного выражения 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'));
}

Все, после этого и регулярка будет работать верно, и скрипт не поломается после конвертации.

Комментарии
Получать ответы на почту
Получать ответы на почту

Разделы
Подписка на статьи
Выберите рассылку
Последние комментарии