0

私は不可能なことを任されたのでしょうか?

電話番号が書かれたテーブルがあります。しかし、それらは手動で入力され、非常に汚いです。

例:

0711112399
07 1111 3288
07 1111 4832 NIKKI
0711117929
0711113616X123
0
NULL
1300 111 782

.

(罪のない人を守るために番号が変更されました。:))

これらを CountryCode AreaCode Number Extension に分割する必要があります

したがって、0711112399CountryCode = +61 になります (この番号にはコードがないため) AreaCode = 07 Number = 11112399 Extension = NULL

11113616X123Country +61 AreaCode = NULL Number = 11113616 Extension = 123

ルールは次のとおりです。

市外局番:

02 03 04 07 08

これは可能ですか?

07 1111 4832 NIKKI の場合 - 2 つの数字の間の X でない限り、英数字を削除します。

4

3 に答える 3

0

不可能とは言いませんが、厳密なテストが必要です。しかし、必ずしも正規表現に焦点を当てているわけではありません。他の手法を使用して実装する方が簡単な場合があります。

これは、テスト駆動開発でアプローチする理想的なケースです。考えられるすべてのケースをリストすることから始め、ケースごとに単体テストを作成し、ケースのサニタイザー コードを調整します。

于 2012-11-22T07:14:06.273 に答える
0

電話番号を正規化するための専用ライブラリがあり、非常に専門的です。しかし、正規表現にも依存する傾向があります。Lync Server (Microsoft の Voice over IP ソリューション) には、正規表現に依存する正規化ライブラリがあります。彼らのページには、あなたに役立つかなりの数のサンプルが含まれています:

http://technet.microsoft.com/en-us/library/gg413082.aspx

最終的には、1 つの式を作成してすべてを正規化するよりも、共通の形式に正規化する多数の式を作成する方がおそらく簡単です。

于 2012-11-22T11:47:51.647 に答える
0

これを試すことができます

^(00\d{2}|\+\d{2})?(0\d)?([\d ]+)(?:[xX](\d+))?

こちらの Regexrを参照してください。青く強調表示された一致にカーソルを合わせると、グループの内容を確認できます。

グループ 1 に国コード、グループ 2 に市外局番、グループ 3 に番号、グループ 4 に内線番号を配置します。番号以外のすべての部分はオプションです。パーツが見つからない場合、グループの値は設定されていないため、デフォルト値を設定する必要があります。

国コードに問題があります。ここでは 2 桁でハードコードされていますが、3 桁の国もあります。1 桁のコードの国については、よくわかりませんが、先頭に 0 がある可能性があります。しかし、市外局番/番号がいつ開始されるかを知るためにこれが必要です.

于 2012-11-22T07:12:06.540 に答える