2

現在、大量のテキスト文字列があるプロジェクトに取り組んでいます。このプロジェクトでは、電話番号をローカライズして、Androidフォンでクリックできるようにする必要があります。

電話番号はさまざまな形式にすることができ、その前後でさまざまなテキストを使用できます。あらゆる種類の電話番号形式を簡単に検出する方法はありますか?使用できるライブラリはありますか?

電話番号は次のように表示でき、これらすべての組み合わせで機能する必要があります。結果は次のようになります

<a href="tel:number">number</a>

+61 8 9000 7911

+2783 207 5008

+ 82-2-806-0001

+56(2)509 69 00

+44(0)1625 500125

+1 (305)409 0703

031-704 98 00

+46 31708 50 60

4

4 に答える 4

2

おそらく次のようなものです:

/(\+\d+)?\s*(\(\d+\))?([\s-]?\d+)+/
  • (\+\d+)?= 「+」の後に 1 つ以上の数字が続く (オプション)
  • \s*= 任意の数の空白文字 (オプション)
  • (\(\d+\))?= A "(" の後に 1 つ以上の数字が続き、その後に ")" (オプション)
  • ([\s-]?\d+)+= オプションで前にスペースまたはダッシュを付けた 1 つ以上の数字のセット

しかし、正直なところ、1 つの式ですべてを支配できるとは思えません。電話番号は非常に多くの異なる形式になる可能性があるため、誤検出や誤検出なしで可能な形式を一致させることはおそらく非現実的です。

于 2012-04-13T13:16:52.587 に答える
1

そのためのライブラリがあるかどうかはわかりません。うーん。国際的な設備と同様に、電話番号は標準化されており、電話番号を定義する形式も必要です。E.164 は、推奨される電話番号を提案します: http://en.wikipedia.org/wiki/E.164。すべてのオープンソースのデコード ライブラリは、これらの標準形式を読み取って構築されているため、既存のライブラリが本当に見つからない場合に役立つはずです。

于 2012-04-13T13:14:12.490 に答える
0

私はこれがこれらの場合にそれを行うかもしれないと思いますか?

preg_replace("/(\+?[\d-\(\)\s]{7,}?\d)/", '<a href="tel:$1">number</a>', $str);

基本的に + で開始できるかどうかを確認します。その必要はありません。次に、数字、-、(、)、および少なくとも 8 つのケースのスペースがあるかどうかを確認して、電話番号以外の低い番号を選択しないようにします。

于 2012-04-13T13:10:54.860 に答える