Деталь Средства связи
Маска
Технические вопросы
7.x

Как изменить маску ввода E-mail?

Коллеги. доброго вечера!
Каким образом можно изменить маску ввода E-mail в детали "Средства связи контрагента"? Проблема в том, что она сейчас не принимает адрес в домене *.company - в маске стоит ограничение на 4 символа в строке после точки (а нужно 7)

Нравится

10 комментариев

В общем и целом расписано здесь (см. пример 2)

Но нужно сказать, что у нас на версии 7.5 этот пример оказался некорректен в плане переопределения метода addItem, так как он не возвращает никаких item. Поэтому пришлось его полностью скопипастить из родительской BaseCommunicationDetail и заменить строчку

[javascript]
this.addColumnValidator("Number", newItem.validateField, newItem);
[/javascript]

на
[javascript]
this.addColumnValidator("Number", this.validateCommunicationFormat, newItem);
[/javascript]

Ну и, конечно, определить метод validateCommunicationFormat, в котором проверять в зависимости от типа средства связи по регэкспу формат и возвращать объект с invalidMessage и fullInvalidMessage.

Андрей, большое спасибо, всё получилось!

[javascript]
{
validateEmailFormat: function (value) {
var invalidMessage = "";
var isValid = true;
var communicationType = this.get("CommunicationType");
var number = value || this.get("Number");
// Проверка введенного E-mail на соответствие маске ввода.
if (communicationType.value == "ee1c85c3-cfcb-df11-9b2a-001d60e938c6") { // E-mail
isValid = (Ext.isEmpty(number) || new RegExp("^[0-9a-z_]+@[0-9a-z_]+\.[a-z]{2,10}$").test(number));
if (!isValid) {
invalidMessage = "Укажите E-mail по формату";
}
}
return {
fullInvalidMessage: invalidMessage,
invalidMessage: invalidMessage
};
}
[/javascript]

Замечательно. Наверное стоит еще добавить дефис в список символов допустимых в E-mail. Только нужно добавлять его либо самым последним перед ], либо первым - сразу после [

ещё вопрос возник - как заставить код принимать русские символы в e-mail? Например, для info@сайт.рф. Вариант ^[0-9a-z_-\.]+@[0-9a-zа-яё_-\.]+\.[a-zа-яё]{2,10}$ почему-то не срабатывает

Здравствуйте, Антон!

Ваш вариант не будет работать.
Корректной маской будет:
[javascript]
var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Zа-ЯА-Я0-9.-]+\.[a-zA-Zа-яА-Я]{2,10}$/;
[/javascript]

Алексей, предложенный Вами вариант тоже не сработал. Может быть, для работы с кириллицей что-то дополнительно подключить нужно?

Несколько уточняющих уточняющих вопросов:
1) Вы замещали EmailHelper?
2) После замещения EmailHelper Вы скопировали весь код из материнской схемы и заменили одну строку определения параметра emailPattern?
3) После сохранения схемы необходимо очистить кэш браузера. Вы это сделали?

1. Замещал BaseCommunicationDetail
2. -
3. -

Тогда:
1) Заместите EmailHelper. В замещающую схему вставьте следующий код:
[javascript]
define('EmailHelper', ['ext-base', 'terrasoft', 'EmailHelperResources', 'ConfigurationConstants', 'MaskHelper'],
function(Ext, Terrasoft, resources, ConfigurationConstants, MaskHelper) {

function isEmailAddress(emailAddress) {
var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Zа-яА-Я0-9.-]+\.[a-zA-Zа-яА-Я]{2,9}$/;
return emailPattern.test(emailAddress);
}

function getEmailUrl(emailAddress) {
if (isEmailAddress(emailAddress)) {
return 'mailto:' + emailAddress;
}
return '';
}

function onEmailUrlClick(emailAddress) {
var url = getEmailUrl(emailAddress);
if (!Ext.isEmpty(url)) {
var win = window.open(url, '', 'height=1,width=1');
setTimeout(function() {
win.close();
}, 1000);
}
}

return {
isEmailAddress: isEmailAddress,
getEmailUrl: getEmailUrl,
onEmailUrlClick: onEmailUrlClick
};
});
[/javascript]

2) Очистите кэш.

В результате Вы сможете создавать средства связи с типом Email с кириллическими символами в домене (например *.почта.рф) , а также с длиной домена в 9 символов (например, *.travel)

Алексей, работает, спасибо!

Показать все комментарии