Quiero filtrar los números de teléfono y la identificación de Mac desde un campo de entrada... si la cadena comienza con '00', coloque dos puntos después de cada dos números enteros con caracteres y si comienza con cualquier otro número, no coloque dos puntos después de dos números. ...
var dynamicMask = new IMask(document.getElementById('user'), { mask: [{ mask: '0*:**:**:**:**:**' }, { mask: /^\S*@?\S*$/ } ] }) <script src="https://unpkg.com/imask"></script> <div class="form-group"> <label>Mac id or phone</label> <input type="text" class="form-control" name="user" id="user" placeholder="Enter ..." /> </div>Es un poco complicado permitir múltiples formatos dependiendo de los valores. Los números de teléfono no tienen un estándar real (excepto los números iniciales de 00 o + para internacional, 0 para nacional y 1-9 para proveedor/ubicación al principio) y también pueden tener una longitud de 12 y apenas dependen del país/proveedor/ ubicación del objetivo.
Sugiero usar dos campos de entrada diferentes en lugar de dos formaciones según la longitud/valor de entrada.
Pero algo como esto lo hará:
<input type="text" id="user"> <script> /* * This allows: @0123456789af, @01:23:45:67:89:af and 01:23:45:67:89:af threaded as mac address any other input like: 00:00:00:00:00 or 01:23:45:67:89:az handled as phone number (removes any non numeric value on focusout) */ IMask(user, { mask: /[@:0-9a-f]/gi, // allow anything prepare(char) { // allow only @, :, 0-9 and af for input // this allows: @[a-f0-9]{12} values to be entered or 00:00:00:00:00:00... return char.replace(/[^@:0-9a-f]/i, ''); }, commit(value, masked) { // leading @ will be removed // check if it contains already a : and has a length of 6 sets with 2 byte length each if (value.split(':').length == 6 && value.split(':').every(p => p.length == 2) && !value.startsWith('@')) { // add an @ leading for the text below value = '@' + value; } value = value.replace(/:/g, ''); const dummy = document.createElement("input"); // required else call for IMask() on dummy won't work document.body.appendChild(dummy); dummy.setAttribute("value", value.startsWith('@') ? value.substr(1) : value); // length must be 12 and should not start with 00 if (/^@[0-9a-f]{12}$/i.test(value)) { // remove the leading @ that was added before or by the user and add : formation masked._value = IMask(dummy, { mask: '**:**:**:**:**:**' })._value; } else { // filter only numbers masked._value = IMask(dummy, { mask: /.*/, prepare(str) { return str.replace(/[^0-9]/, ''); } })._value; } dummy.remove(); } }); </script>