0

Хотелось бы вырезать смайлы при вводе в импут (в рантайме). Создал директиву, линканул. Проблема - первый введенный смайл вырезает, на второй введенный не реагирует, на третий вырезает два. Если заменяю в реплейсе пустые кавычки на "1", отрабатывает хорошо, каждый смайл реплейсит на 1.

Есть ли у кого мысли? буду благодарен!

(function () {
 angular.module('LoyaltyApp')
 .directive('filter', function () {
 return {
 require: 'ngModel',
 link: function (scope, elem, attr, ctrl) {
 // create the regex obj. for emoji signs
 var regex = new RegExp('(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff]|[\u0023-\u0039]\ufe0f?\u20e3|\u3299|\u3297|\u303d|\u3030|\u24c2|\ud83c[\udd70-\udd71]|\ud83c[\udd7e-\udd7f]|\ud83c\udd8e|\ud83c[\udd91-\udd9a]|\ud83c[\udde6-\uddff]|\ud83c[\ude01-\ude02]|\ud83c\ude1a|\ud83c\ude2f|\ud83c[\ude32-\ude3a]|\ud83c[\ude50-\ude51]|\u203c|\u2049|[\u25aa-\u25ab]|\u25b6|\u25c0|[\u25fb-\u25fe]|\u00a9|\u00ae|\u2122|\u2139|\ud83c\udc04|[\u2600-\u26FF]|\u2b05|\u2b06|\u2b07|\u2b1b|\u2b1c|\u2b50|\u2b55|\u231a|\u231b|\u2328|\u23cf|[\u23e9-\u23f3]|[\u23f8-\u23fa]|\ud83c\udccf|\u2934|\u2935|[\u2190-\u21ff])', 'g');
 // add a parser that will process each time the value is
 // parsed into the model when the user updates it.
 ctrl.$parsers.unshift(function (value) {
 console.log('value', value);
 var valid = value.replace(regex, "");
 console.log('replace Value (valid)', valid);
 if(value !== valid){
 ctrl.$viewValue = valid;
 }
 ctrl.$render();
 return valid;
 });
 }
 };
 });
})();

введите сюда описание изображения

задан 9 июл. 2019 в 11:34

1 ответ 1

1

Я бы повесил на input встроенную директиву ngPattern. Получилось бы что-то типа такого:

html

<input type="text" ng-model="..." required ng-pattern="textWithoutSmilesPattern" />

js controller

$scope.textWithoutSmilesPattern = "/^.*[^(?:[\u2700-\u27bf]|(?:\ud83c[\udde6-\uddff]){2}|[\ud800-\udbff][\udc00-\udfff]|[\u0023-\u0039]\ufe0f?\u20e3|\u3299|\u3297|\u303d|\u3030|\u24c2|\ud83c[\udd70-\udd71]|\ud83c[\udd7e-\udd7f]|\ud83c\udd8e|\ud83c[\udd91-\udd9a]|\ud83c[\udde6-\uddff]|\ud83c[\ude01-\ude02]|\ud83c\ude1a|\ud83c\ude2f|\ud83c[\ude32-\ude3a]|\ud83c[\ude50-\ude51]|\u203c|\u2049|[\u25aa-\u25ab]|\u25b6|\u25c0|[\u25fb-\u25fe]|\u00a9|\u00ae|\u2122|\u2139|\ud83c\udc04|[\u2600-\u26FF]|\u2b05|\u2b06|\u2b07|\u2b1b|\u2b1c|\u2b50|\u2b55|\u231a|\u231b|\u2328|\u23cf|[\u23e9-\u23f3]|[\u23f8-\u23fa]|\ud83c\udccf|\u2934|\u2935|[\u2190-\u21ff])].*$/";

Работает так: если где-то в тексте встречается текст по вашему regex (какой-либо смайлик), то это поле будет считаться неправильно заполненным. Форма не отправится.

ответ дан 9 июл. 2019 в 13:02

Ваш ответ

Черновик сохранён
Черновик удалён

Зарегистрируйтесь или войдите

Регистрация через Google
Регистрация через почту

Отправить без регистрации

Необходима, но никому не показывается

Отправить без регистрации

Необходима, но никому не показывается

Нажимая «Отправить ответ», вы соглашаетесь с условиями пользования и подтверждаете, что прочитали политику конфиденциальности.

Начните задавать вопросы и получать на них ответы

Найдите ответ на свой вопрос, задав его.

Задать вопрос

Изучите связанные вопросы

Посмотрите похожие вопросы с этими метками.