Подскажите, есть форматирование для введеного текста в инпут. У меня форматирование на pixel происходит, но у тестера на samsung форматирование не происходит. Добавлял дополнительный хэндлер на событие инпут и блюр, форматирование также не работает. Миксин vue 2:
export default {
data() {
return {
caseNumber: '',
useNewNumber: false,
caseNumberLengthLower5: false,
}
},
methods: {
formatCaseNumber(value) {
if (!value) {
return '';
}
let cleanedCaseNumber = value.toUpperCase()
.replace(/[^AА0-9\/-]/g, '')
.replace(/^[^AА]/, '')
.replace(/^([AА])[AА]+/g, '$1')
.replace(/([^AА])[AА]+/g, '$1')
.replace(/([AА])([AА]+)/g, '$1')
.replace(/([0-9\/])([A-ZА-Я]+)/gi, '$1');
const dashIndex = cleanedCaseNumber.indexOf('-');
const slashIndex = cleanedCaseNumber.indexOf('/');
if (!cleanedCaseNumber) {
return '';
}
if (cleanedCaseNumber.length >= 3 && cleanedCaseNumber[1] === '0' && cleanedCaseNumber[2] === '0') {
cleanedCaseNumber = `${cleanedCaseNumber.slice(0, 2)}${cleanedCaseNumber.slice(3)}`;
}
if (cleanedCaseNumber.includes('-')) {
cleanedCaseNumber = cleanedCaseNumber
.replace(/-/g, (match, offset) => offset === 3 ? '-' : '');
}
if (cleanedCaseNumber.includes('/')) {
cleanedCaseNumber = cleanedCaseNumber
.replace(/\//g, (match, offset, string) => offset === string.indexOf('/') ? '/' : '')
}
if (cleanedCaseNumber.length > 14 && !cleanedCaseNumber.includes('/')) {
const beforeSlash = cleanedCaseNumber.slice(0, 14).replace(/-/g, '');
const afterSlash = cleanedCaseNumber.slice(14).replace(/[^0-9]/g, '');
cleanedCaseNumber = `${beforeSlash}/${afterSlash}`;
}
if (dashIndex !== -1 && slashIndex !== -1 && dashIndex < slashIndex) {
const maxLengthBetween = 10;
const start = dashIndex + 1;
const end = slashIndex;
const betweenLength = end - start;
if (betweenLength > maxLengthBetween) {
const newEnd = start + maxLengthBetween;
cleanedCaseNumber = `${cleanedCaseNumber.slice(0, start)}${cleanedCaseNumber.slice(start, newEnd)}${cleanedCaseNumber.slice(slashIndex)}`;
}
}
if (slashIndex !== -1) {
const maxLengthAfterSlash = 4;
const totalAllowedLength = slashIndex + 1 + maxLengthAfterSlash;
if (cleanedCaseNumber.length > totalAllowedLength) {
cleanedCaseNumber = cleanedCaseNumber.slice(0, totalAllowedLength);
}
}
return cleanedCaseNumber.slice(0, 19);
},
formatCaseNumberHandleOnInput() {
// для samsung
this.caseNumber = this.formatCaseNumber(this.caseNumber);
},
formatCaseNumberOnBlur() {
// для samsung
this.caseNumber = this.formatCaseNumber(this.caseNumber);
},
},
watch: {
caseNumber: {
handler(newValue, prevValue) {
if ((prevValue.length === 2 && newValue.length === 3 && !newValue.includes('-'))
|| (prevValue.length === 0 && newValue.length === 3 && !newValue.includes('-'))) {
this.caseNumber = `${newValue.slice(0, 3)}-${newValue.slice(3)}`;
}
if (newValue.length < 5) {
this.caseNumberLengthLower5 = true;
}
},
}
},
В чем может причина или какое-то другое событие использовать?