jcore-ui
Version:
jcore-ui - components for building an interface
116 lines (96 loc) • 3.79 kB
text/typescript
const mask = {
string(element: any) {
function mask(element: any) {
element.value = element.value.replace(/[^a-zA-ZА-Яа-яЁё]/gi,'').replace(/\s+/gi,'').trim();
}
element.addEventListener('input', function() {
mask(element)
})
element.addEventListener('keydown', function() {
mask(element)
})
mask(element)
return element
},
number(element: any) {
function mask(element: any) {
element.value = element.value.replace(/^\.|[^\d\.]|\.(?=.*\.)|^0+(?=\d)/g,'').trim();
}
element.addEventListener('input', function() {
mask(element)
})
element.addEventListener('keydown', function() {
mask(element)
})
mask(element)
return element
},
float(element: any) {
function mask(element: any) {
element.value = element.value.replace(/[^\d+.\d+]/g,'').trim();
}
element.addEventListener('input', function() {
mask(element)
})
element.addEventListener('keydown', function() {
mask(element)
})
mask(element)
return element
},
phone(element: any) {
let keyCode: number;
const mask = (event: any) => {
event.keyCode && (keyCode = event.keyCode);
const position = element.selectionStart;
if (position < 3 && event.keyCode != 35 && event.keyCode != 39) {
event.preventDefault();
element.selectionStart = element.value.length;
}
element.value = checkMask(event, element.value);
if (element.value[1] == '9') {
let valueArr = element.value.split('');
valueArr.splice(1, 0, '7');
let strValue = valueArr.join('');
strValue = strValue.replace(/[^+\d]/g, '');
element.value = checkMask(event, strValue)
} else {
element.value = element.value.replace(element.value[1], '7');
}
}
const checkMask = (event: any, value: any) => {
const matrix = "+7 (___) ___-____";
let i = 0;
const defaulthMask = matrix.replace(/\D/g, "");
const elementValue = value.replace(/\D/g, "");
let newElementValue = matrix.replace(/[_\d]/g, (a) => {
return i < elementValue.length ? elementValue.charAt(i++) || defaulthMask.charAt(i) : a;
});
i = newElementValue.indexOf("_");
if (i != -1) {
newElementValue = newElementValue.slice(0, i);
}
let reg: any = matrix.substr(0, value.length).replace(/_+/g, (a) => {
return "\\d{1," + a.length + "}";
})
.replace(/[+()]/g, "\\$&");
reg = new RegExp("^" + reg + "$");
if (!reg.test(value) || value.length < 5 || keyCode > 47 && keyCode < 58) {
value = newElementValue;
}
if (event.type == "blur" && value.length < 5) {
value = "";
}
if (event.type == "input" && value.length < 5 && keyCode > 36 && keyCode < 41) {
event.preventDefault();
}
return value
}
element.addEventListener("input", mask, false);
element.addEventListener("focus", mask, false);
element.addEventListener("blur", mask, false);
element.addEventListener("keydown", mask, false);
return element;
}
}
export default mask