Я пытаюсь внедрить исчерпывающее форматирование поля (здесь, бельгийских телефонных номеров), пока пользователь печатает.
Вот код:
FormatZoneNumberOther: function (field, event, isGsm) { // +32 XX XX XX XX
console.log('FormatZoneNumberOther');
var authorisedValues = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'Backspace', 'Enter', 'Tab', 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'],
keyValue = event.key; // string of the key pressed
if (field.value.length === 3 ||
field.value.length === 6 ||
field.value.length === 9 ||
field.value.length === 12 ||
field.value.length === 15) {
field.value += ' ';
}
if ((authorisedValues.indexOf(keyValue) === -1) && (keyValue !== '+') && (field.value.length !== 1)) event.preventDefault();
if (field.value.length > 14) {
event.preventDefault(); // prevent longer number than needed
checkZoneCode(field.value.substring(4, 7));
if (isGsm) {
alert('You have to insert a GSM number with format: +XX XX XX XX XX (FormatZoneNumberOther)');
return false;
}
}
},
Проблема моего клиентапопросил меня исправить, когда конечный пользователь хочет изменить одну или несколько частей номера: 01 234 55 67 89 => 01 222 55 67 89.
Очевидно, что пользователь поместит курсор сщелчок мыши или, может быть, с помощью клавиш со стрелками, но это вызывает некоторые проблемы, поскольку проверка выполняется на основе длины поля, которая затем будет длиннее, чем курсор.
Как улучшить эту функцию, чтобыпринять во внимание запрос моего клиента, а также в глобальном масштабе?
Заранее спасибо,
PS: это должно быть сделано в ES3 или JQuery 2.1.3 (максимум) и работать по IE11 по причинам...
Edit1: я не могу использовать шаблоны ввода HTML5 по тем же причинам.Edit2: я пытался реализовать проверку регулярных выражений, как это казалось многообещающим, но я не могу понять, как эффективно протестировать изменяющуюся строку (когда я печатаю) с фиксированным шаблоном.Если это помогает, когда пользователь отправляет поле, мой бэкэнд выполняет следующий тест:
var pattern = / (+ \ d {2}) {1} (46 [0-1] | 463 | 46[5-8] | 47 [0-9] | 480 | 48 [3-9] | 49 [0-9]) {0,} (\ d {2}) {0,} (\ d {2}) {0,} (\ d {2}) {0,} /