5

次の正規表現:

x.toString().replace(/\B(?=(?:\d{3})+(?!\d))/g, "-"); 

は、 3文字目ごとにダッシュを追加して、入力すると に123456789変わります123-456-789。この正規表現を使用して電話番号をフォーマットしようとしています。問題は 10 番目の文字で発生します。入力は に1234567890変わります1-234-567-890

上記の正規表現をどのように変更して、10 桁の文字列を123-456-7890. ユーザーがキーアップイベントを使用して入力しているときにこれが発生するため、この正規表現を使用します。

これを行うためのより簡単またはより良い方法を知っている場合は、私を助けてください。ユーザーが入力している間にダッシュを追加する必要があります。他の文字は許可されていません。

ノート:

  1. Jquery Masked 入力プラグインを使用できません (中央の文字を編集するとフォーカスが台無しになるため)
4

5 に答える 5

4

すでに完全な数値または文字列を持っている場合

var x = "329193914";
console.log(x.replace(/(\d{3})(\d{3})(\d{3})/, "$1-$2-$3"));

誰かが入力している場合...

$('#locAcct').keyup(function () {
    var foo = $(this).val().split("-").join(""); // remove hyphens
    if (foo.length > 0) {
        foo = foo.match(new RegExp('.{1,3}', 'g')).join("-");
    }
    $(this).val(foo);
});
于 2015-10-12T22:33:31.247 に答える
1

すべてに正規表現を使用する必要がありますか、それともこのようなものも役に立ちますか?

function convertToValidPhoneNumber(text) {
    var result = [];
    text = text.replace(/[^\d]/g,"");
    while (text.length >= 6) {
        result.push(text.substring(0, 3));
        text = text.substring(3);
    }
    if(text.length > 0) result.push(text);
    return result.join("-");
}

入力フィールドのテキストが変更されるたびに、この関数を使用できます。次の結果が生成されます。

"12345678" -> "123-45678"
"123d456789" -> "123-456-789"
"123-4567-89" -> "123-456-789"
于 2013-05-16T22:53:28.217 に答える