Как можно сделать так, чтобы любой символ использовался в маске ввода номера?

Как можно настроить плагин jQuery Masked Input Plugin так, чтобы в начале ввода можно было использовать любой символ, в том числе "+" или любую цифру? Сейчас у меня установлена такая маска: <br/> <code>$("input[name=phone]").mask("99999999999");</code> <br/> Но мне нужно, чтобы первая позиция принимала символ плюс "+".
  • 27 сентября 2024 г. 9:33
Ответы на вопрос 3
Для того чтобы настроить маску таким образом, чтобы первая позиция принимала любой символ, включая "+" или цифры, можно воспользоваться функцией `mask` и использовать специальный шаблон. В `jQuery Masked Input Plugin` можно указать альтернативные символы через флаг `?`. 

В вашем случае, поскольку требуется заменить первую позицию, вы можете написать маску, которая сначала принимает "+" или "9" (для цифр). Вот пример, как это можно сделать:

```javascript
$("input[name=phone]").mask("+99999999999", {
    placeholder: ""
});
```

или, если вы хотите, чтобы входил любой символ в первой позиции, попробуйте:

```javascript
$("input[name=phone]").mask("A9999999999", {
    placeholder: ""
});
```

Где `A` это символ, который позволит вводить любой символ, включая "+" или любую цифру.

Если требуется более тонкая настройка маски (чтобы в первую позицию разрешали только плюс или цифры), возможно, потребуется использовать регулярные выражения для проверки дополнительных условий ввода. Но в зависимости от реализации плагина mask может не поддерживать такую функцию напрямую. 

Также, стоит обратить внимание, что настройка `placeholder` может быть важной частью использования масок, так как она помогает пользователю понимать, что нужно вводить в поле. Таким образом, вместо пустой строки можно указать логичное значение.
Да просто доработайте маску и всё: 

$("input[name=phone]").mask("+?99999999999");

Если прям хотите изощриться, то можно использовать более сложный шаблон:

$("input[name=phone]").mask("A9999999999", {
  translation: {
    'A': { pattern: /[0-9+]/ }
  }
});
В этой самой маске столько косяков и мелей, что сразу может и крыша поехать. У меня сейчас вот такое чудище стоит 
$("input[type='tel']").each(function(){
                if(!this.inputmask) { // ставили уже ?
                    let mask="+7 (999) 999-99-99[999]"; // 6 - 3-я 9-ка, 9-4-z 9-rf, 10-5.
                    function oninput(){
                        const wphoneValue = jQuery(this).val().replace(/\D/g, '');

                        if (wphoneValue.length >= 4) {
                            const firstThreeDigits = parseInt(wphoneValue.substring(1, 4));
                            if(firstThreeDigits>699 && firstThreeDigits<900 && firstThreeDigits!==812){
                                // remove first letter from value
                                jQuery(this).val(jQuery(this).val().replace(/\+7 \([78]/,'+7 ('));
                                let pos=0;
                                for(let x=wphoneValue.length;x>1;x--){
                                    pos=mask.indexOf('9', pos+1);
                                }
                                this.setSelectionRange && this.setSelectionRange(pos,pos,"forward");
                            }
                        }
                    }
                    $(this).on('input', oninput)
                        .inputmask({
                        "mask": mask,
                        skipOptionalPartCharacter: " ",
                        placeholder: "_",
                        autoclear: false,
                        onBeforePaste: function (pastedValue, opts) {
                            pastedValue = pastedValue.toLowerCase().replace(/\D/g, '').replace(/7(\d{10})/, '$1').replace(/8(\d{10})/, '$1');
                            return pastedValue;
                        }
                    })
                    var that=this;
                    setTimeout(function(){oninput.call(that)},10);
                }
            })

Пояснения:
Похожие вопросы