1

現在、さまざまなマスク形式に jquery.maskedinput を使用していますが、電話番号では機能しません。

ブラジルでは、すべての数値を (99)9999-9999 の形式で使用していました。しかし最近、いくつかの都市では、携帯電話は (99)99999-9999 を使用していますが、通常の電話と国の残りの部分は (99)9999-9999 のままです。

jquery.maskedinput は、文字列の途中に文字が存在する場合と存在しない場合がある同じ入力で 2 つの形式をサポートしていないようです。ドキュメントでわかるように、(99)9999-9999 と (99)9999-99999 を使用できますが、それはユーザーを混乱させるでしょう。

(99)9999-9999 と (99)99999-9999 の両方を検証できる他のマスク プラグイン/フレームワークはありますか?

編集: ハリーとドミトリーのソリューションを使用して完全なテストを作成しました: http://jsfiddle.net/NSd6g/ $('#full').inputmask('(99)9999[9]-9999');

より良い解決策を見つけることができるかどうかを確認するために、もう少し待ちます。完璧なものは赤いメッセージを必要とせず、2 番目のグループはデフォルトで 4 桁になります。そして、3 番目のグループが 5 番目の桁を取得する場合、2 番目のグループは 5 番目のスペースを取得し、3 番目のグループの最初の桁を 2 番目のグループの 5 番目の桁に移動します。笑 ちょっと分かりづらくてすみません!

4

5 に答える 5

5

jquery.inputmaskを使用して、次のように簡単にこれを実現できます。

jQuery(function($) {
    $('#test').inputmask('(99)9999[9]-9999');
});

このデモを試してください。

入力中にオプション部分をスキップするには、マスクのオプション部分 (この場合はハイフン) の後にスペースまたは char を入力する必要があります。

于 2013-02-18T15:01:04.220 に答える
2

私もブラジル人です。

私の仕事では、これらのタイプのマスクの真ん中に「-」文字を実際には使用しないため、混乱はありません...最終的なマスクは次のようになります。(99)99999999?9

この方法では、間違って入力された電話番号を最終ユーザーが特定するのは少し難しくなりますが、機能します。

私が知っている別の方法は、JS で正規表現を構築し、それを別のプラグイン (たとえばjQuery Validateなど) で使用することです。

于 2013-02-18T14:54:18.150 に答える
1

jQuery マスクを使用すると、末尾の文字のみをオプションにすることができます。入力の真ん中にあるものではありません。

私の提案は、数値の各部分に 1 つ、中央の入力の最後にオプションの文字を 1 つ、3 つの入力ボックスを用意することです。次に、送信時に入力を連結します。

そのようです:

 (<input id="phone2" />)<input id="phone3" />-<input id="phone4" />

jQuery(function($){
  $("#phone2").mask("99");
  $("#phone3").mask("9999?9");
  $("#phone4").mask("9999");
});

フィドルを参照してください: http://jsfiddle.net/Rge83/1/

よりユーザーフレンドリーにするために、現在の入力が満たされたら次の入力に移動するスクリプト + css を追加して、入力をより似たものにすることができます。

于 2013-02-18T14:53:49.997 に答える
0
//Configuração para celular com nono digito
$('#Seletor').focusout(function () {
    var phone, element;
    element = $(this);
    element.unmask();
    phone = element.val().replace(/\D/g, '');
    if (phone.length > 10) {
        element.mask("(99) 99999-999?9");
    } else {
        element.mask("(99) 9999-9999?9");
    }
}).trigger('focusout');
于 2013-09-25T17:34:00.717 に答える