1

一部の電話番号を正規表現でフォーマットしようとしています。私が保存した電話番号は長さが異なり、すべての電話番号には国コードがあります。数字が次のように見えるとしましょう: 00460708186681. 私はそれを次のようにフォーマットしたいと思います: +46 (0)708-18 66 81. 最初の 3 つのグループは簡単です:

/00([\d]{2})([\d]{1})([\d]{3})/

番号の先頭は常に同じだからです。残りの文字の長さがわからない最後の部分です(そして、それらを2つのグループに分割したいです)。

4

4 に答える 4

1

ここでは、正規表現は最善の解決策ではありません。これを使って:

var num = new String("00460708186681"),
    i = 2,
    p,
    res = "+"+num.substr(i,2)+" ("+num.charAt(i+=2)+")"+num.substr(++i,3)+"-"+num.substr(i+=3,2);
while (p=num.substr(i+=2,2))
    res+= "\u00A0"+p;
return res;

これは、無限に長い数で機能します。正規表現はそれを行うことができません。

于 2012-07-17T09:53:45.630 に答える
1

次の正規表現をベースとして開始します。

00(\d{2})(\d)(\d{3})(\d{2})

(\d{2})?可能なペアごとに別のペアを追加します(「?」に注意してください)。したがって、ペアの最大数が 3 の場合は、次のようにします。

00(\d{2})(\d)(\d{3})(\d{2})(\d{2})?(\d{2})?

きれいではありませんが、正しくグループ化するには、そのようにする必要があります。または、次のようにすることもできます。

00(\d{2})(\d)(\d{3})((?:\d{2}){2,4}) // In this case it's 2 to 4 pairs of digits on the end.

文字列を一致させるには、最初の書式設定後にすべての数字を含む最後のグループにスペースを手動で追加できます。

于 2012-07-17T09:39:37.243 に答える
0

ここに解決策があります:

Javascript:

var num="00460708186681";
var res=num.replace(/([0+]{2})([1-9]{2})([\d]{1})([\d]{3})([\d]{2})([\d]{2})([\d]{2})/g,'+$2($3)-$4 $5 $6 $7');
alert(res);

http://codebins.com/で上記のスクリプトを試してください。

于 2012-07-17T13:23:57.763 に答える